我想采用存储在对象中的罗马数字值并将其转换回整数,长整数,浮点数和双精度值。除了创建适当的方法之外,我真的不知道从哪里开始。任何人都可以提供建议吗?如何创建RomanNumeral对象并将其转换回int,long等?
谢谢!
我想采用存储在对象中的罗马数字值并将其转换回整数,长整数,浮点数和双精度值。除了创建适当的方法之外,我真的不知道从哪里开始。任何人都可以提供建议吗?如何创建RomanNumeral对象并将其转换回int,long等?
谢谢!
你的问题似乎是如何转换罗马数字为整数。在这种情况下,您只需要一个函数来从左向右解析字符串,并将结果添加到一起,同时寻找应该减去的较小数字。
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...
}
}
}
一旦你有了整数,你可以将它转换为其他数值类型。
谢谢,这个工作,但如果我真的想创建一个RomanNumeral对象并克隆它呢? – TimeBomb006
@ TimeBomb006将解析器方法放入RomanNumeral类中。那么如果你需要克隆它,你只需要复制一串罗马数字。 – JonC
您似乎不需要深层副本,因为您的类看起来是不可变的。
你的“转换”的方法都可以返回intVal
正如Peter指出的那样,您不需要深层复制。关于罗马数字到阿拉伯语的转换,请参阅this question的答案。
“深度复制”是什么意思?它甚至没有任何状态,只有内在的类。 –