2012-07-03 20 views

回答

1

你的问题似乎是如何转换罗马数字为整数。在这种情况下,您只需要一个函数来从左向右解析字符串,并将结果添加到一起,同时寻找应该减去的较小数字。

class RomanNumeral{ 
    String roman; 

    public RomanNumeral(String roman){ 
    this.roman = roman; 
    } 

    public RomanNumeral Clone(){ 
    return new RomanNumeral(this.roman); 
    } 

    public int GetValue(){ 
    int sum = 0; 
    int carry = 0; 
    for(int i = 0; i< roman.Length;i++) 
    { 
    if(i<roman.Length-1){ 
     if(GetRomanValue(roman[i])>GetRomanValue(roman[i+1])){ 
      sum += GetRomanValue(roman[i]) - carry; 
      carry = 0; 
     } 
    else carry = GetRomanValue(roman[i]); 
    } 
    else sum += GetRomanValue(roman[i]) - carry; 
    } 
} 

    int GetRomanValue(char c) 
    { 
    switch(c){ 
    case 'I': return 1; 
    case 'V': return 5; 
    //and so on... 
    } 
    } 
} 

一旦你有了整数,你可以将它转换为其他数值类型。

+0

谢谢,这个工作,但如果我真的想创建一个RomanNumeral对象并克隆它呢? – TimeBomb006

+0

@ TimeBomb006将解析器方法放入RomanNumeral类中。那么如果你需要克隆它,你只需要复制一串罗马数字。 – JonC

1

您似乎不需要深层副本,因为您的类看起来是不可变的。

你的“转换”的方法都可以返回intVal

1

正如Peter指出的那样,您不需要深层复制。关于罗马数字到阿拉伯语的转换,请参阅this question的答案。