Java初学者-不带开关的罗马数字到十进制

Java初学者-不带开关的罗马数字到十进制,java,string,string-comparison,Java,String,String Comparison,我在修AP计算机科学课程,我对这个代码有点问题。我们要制作一种方法,将罗马数字字符串转换成十进制值 到目前为止,我们只讨论了if/else语句和while循环。我在这里看到了一些使用switch的答案,但我们班还没有找到答案。我需要一种不使用开关的方法。我只编写了假设罗马数字为非升序的代码,但每当使用“MM”之类的字符串时,该方法都会返回“0”作为值。有人知道为什么会这样吗 任何关于减去数字的提示也将不胜感激 public int decimalValue ( String roman )

我在修AP计算机科学课程,我对这个代码有点问题。我们要制作一种方法,将罗马数字字符串转换成十进制值

到目前为止,我们只讨论了if/else语句和while循环。我在这里看到了一些使用switch的答案,但我们班还没有找到答案。我需要一种不使用开关的方法。我只编写了假设罗马数字为非升序的代码,但每当使用“MM”之类的字符串时,该方法都会返回“0”作为值。有人知道为什么会这样吗

任何关于减去数字的提示也将不胜感激

   public int decimalValue ( String roman ){
     //given a Roman Numeral
     int decimal =0;
     int a = 0; // a and b used as to check each letter in String roman
     int b = 1;

     // Assuming in non-ascending order. Need to make for ascending
     while ( (a <= (roman.length() - 1) ) && (b <= roman.length() ) ) {
        if ( roman.substring(0,1) == "M") {
           decimal = decimal + 1000;
        }
        else if ( roman.substring(0,1) == "D") {
           decimal = decimal + 500;
        }
        else if ( roman.substring(0,1) == "C") {
           decimal = decimal + 100;
        }
        else if ( roman.substring(0,1) == "L") {
           decimal = decimal + 50;
        }
        else if ( roman.substring(0,1) == "X") {
           decimal = decimal + 10;
        }
        else if (roman.substring(0,1) == "V") {
           decimal = decimal + 5;
        }
        else if (roman.substring(0,1) == "I") {
           decimal = decimal + 1;
        }
        a++;
        b++;
        }

  return decimal;
  }
public整数小数(字符串罗马){
//给定一个罗马数字
整数小数=0;
int a=0;//a和b用于检查罗马字符串中的每个字母
int b=1;
//以非升序进行假设。需要进行升序
而((a一些事情:

  • 您不需要两个计数变量
    a
    b
    。一个就足够了
  • 您希望检查字符串的字符,因此应该使用
    roman.charAt(a)
    检查字符串中
    a
    位置的字符
  • ==
    比较的字符(和其他基本类型),必须与
    .equals()比较的字符串
  • 现在使用
    roman.substring(0,1)
    您只需检查字符串的第一个字符,因此您希望将其更改为
    roman.substring(a,a+1)
    或使用我在2中所写的字符。这样您将继续检查一个字符接着一个字符
  • 您还应该考虑像IX这样的数字,这些数字您还不认识;)
  • 有几件事:

  • 您不需要两个计数变量
    a
    b
    。一个就足够了
  • 您希望检查字符串的字符,因此应该使用
    roman.charAt(a)
    检查字符串中
    a
    位置的字符
  • ==
    比较的字符(和其他基本类型),必须与
    .equals()比较的字符串
  • 现在使用
    roman.substring(0,1)
    您只需检查字符串的第一个字符,因此您希望将其更改为
    roman.substring(a,a+1)
    或使用我在2中所写的字符。这样您将继续检查一个字符接着一个字符
  • 您还应该考虑像IX这样的数字,这些数字您还不认识;)
  • 有几件事:

  • 您不需要两个计数变量
    a
    b
    。一个就足够了
  • 您希望检查字符串的字符,因此应该使用
    roman.charAt(a)
    检查字符串中
    a
    位置的字符
  • ==
    比较的字符(和其他基本类型),必须与
    .equals()比较的字符串
  • 现在使用
    roman.substring(0,1)
    您只需检查字符串的第一个字符,因此您希望将其更改为
    roman.substring(a,a+1)
    或使用我在2中所写的字符。这样您将继续检查一个字符接着一个字符
  • 您还应该考虑像IX这样的数字,这些数字您还不认识;)
  • 有几件事:

  • 您不需要两个计数变量
    a
    b
    。一个就足够了
  • 您希望检查字符串的字符,因此应该使用
    roman.charAt(a)
    检查字符串中
    a
    位置的字符
  • ==
    比较的字符(和其他基本类型),必须与
    .equals()比较的字符串
  • 现在使用
    roman.substring(0,1)
    您只需检查字符串的第一个字符,因此您希望将其更改为
    roman.substring(a,a+1)
    或使用我在2中所写的字符。这样您将继续检查一个字符接着一个字符
  • 您还应该考虑像IX这样的数字,这些数字您还不认识;)

  • 不要使用
    ==
    比较
    字符串的内容
    取而代之。你的老师会不允许你使用
    开关吗?
    应该允许你让你的代码看起来更好:pSwitch很好!我们在if和else之前就被教导了开关:不要使用
    ==
    比较
    字符串的内容。使用
    等于()
    取而代之。你的老师会不允许你使用
    开关吗?
    应该允许你让你的代码看起来更好:pSwitch很好!我们在if和else之前就被教导了开关:不要使用
    ==
    比较
    字符串的内容。使用
    等于()
    取而代之。你的老师会不允许你使用
    开关吗?
    应该允许你让你的代码看起来更好:pSwitch很好!我们在if和else之前就被教导了开关:不要使用
    ==
    比较
    字符串的内容。使用
    等于()
    取而代之。你的老师会不允许你使用
    开关吗?
    ?你应该被允许让你的代码看起来更好:pSwitch很好!我们在if和else的:O之前就已经学会了开关