Java 如何创建罗马数字对象并将其转换回int、long等。?

Java 如何创建罗马数字对象并将其转换回int、long等。?,java,Java,我想获取存储在对象中的罗马数字值,并将其转换回整数、long、float和double值。我真的不知道从哪里开始,除了创建合适的方法。有人能提供一些建议吗 谢谢 您似乎不需要深度副本,因为您的类似乎是不可变的 您的“convert”方法都可以返回intVal您似乎不需要深度副本,因为您的类似乎是不可变的 您的“convert”方法都可以返回intVal您的问题似乎是如何将罗马数字转换为整数。在这种情况下,您只需要一个函数从左到右解析字符串并将结果相加,同时查找应该减去的较小数字 class R

我想获取存储在对象中的罗马数字值,并将其转换回整数、long、float和double值。我真的不知道从哪里开始,除了创建合适的方法。有人能提供一些建议吗


谢谢

您似乎不需要深度副本,因为您的类似乎是不可变的


您的“convert”方法都可以返回
intVal

您似乎不需要深度副本,因为您的类似乎是不可变的


您的“convert”方法都可以返回
intVal

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

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...
    }
   }
}
类罗马数字{
弦罗马;
公共罗马数字(字符串罗马){
this.roman=roman;
}
公共罗马数字克隆(){
返回新的罗马数字(this.roman);
}
public int GetValue(){
整数和=0;
整数进位=0;
for(int i=0;i

一旦你有了整数,你就可以把它转换成其他数字类型。

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

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...
    }
   }
}
类罗马数字{
弦罗马;
公共罗马数字(字符串罗马){
this.roman=roman;
}
公共罗马数字克隆(){
返回新的罗马数字(this.roman);
}
public int GetValue(){
整数和=0;
整数进位=0;
for(int i=0;i

一旦你有了整数,你就可以把它转换成其他的数字类型。

正如彼得所指出的,你不需要深度复制。关于罗马数字到阿拉伯语的转换,请参见。

的答案,正如Peter指出的,您不需要深度复制。关于罗马数字到阿拉伯数字的转换,请参见的答案。

您所说的“深度复制”是什么意思?它甚至没有任何状态,只有内部类有。你说的“深度复制”是什么意思?它甚至没有任何状态,只有内部类有。谢谢,这是可行的,但是如果我真的想创建一个RomanNumeric对象并克隆它呢?@TimeBomb006将解析器方法放在RomanNumeric类中。如果你需要克隆它,你只需要复制罗马数字串。谢谢,这是可行的,但是如果我真的想创建一个罗马数字对象并克隆它呢?@TimeBomb006将解析器方法放在RomanNumeric类中。如果你需要克隆它,你只需要复制罗马数字串。