数组索引外界例外罗马数字到整数转换器

我必须编写一个程序,将罗马数字转换为其相应的整数值,但我不断收到java.lang.Array索引出界异常错误。每当我更改某些内容时,它就会输出错误的值。有人可以让我知道我哪里出错了吗?


char n1[] = {'C', 'X', 'I', 'I', 'I'};

int result = 0;

for (int i = 0; i < n1.length; i++) {

  char ch = n1[i];

  char next_char = n1[i + 1];


  if (ch == 'M') {

    result += 1000;

  } else if (ch == 'C') {

    if (next_char == 'M') {

      result += 900;

      i++;

    } else if (next_char == 'D') {

      result += 400;

      i++;

    } else {

      result += 100;

    }

  } else if (ch == 'D') {

    result += 500;

  } else if (ch == 'X') {

    if (next_char == 'C') {

      result += 90;

      i++;

    } else if (next_char == 'L') {

      result += 40;

      i++;

    } else {

      result += 10;

    }

  } else if (ch == 'L') {

    result += 50;

  } else if (ch == 'I') {

    if (next_char == 'X') {

      result += 9;

      i++;

    } else if (next_char == 'V') {

      result += 4;

      i++;

    } else {

      result++;

    }

  } else { // if (ch == 'V')

    result += 5;

  }

}

System.out.println("Roman Numeral: ");

for (int j = 0; j < n1.length; j++)

{

  System.out.print(n1[j]);

}

System.out.println();

System.out.println("Number: ");

System.out.println(result);


慕虎7371278
浏览 83回答 3
3回答

三国纷争

其他人对原因的看法是正确的。我认为你可以设置(根据命名约定应该是)一个虚拟值,该值与罗马数字中使用的任何字母都不匹配,以防没有任何下一个字符:next_charnextChar&nbsp; &nbsp; &nbsp; char nextChar;&nbsp; &nbsp; &nbsp; if (i + 1 < n1.length) {&nbsp; &nbsp; &nbsp; &nbsp; nextChar = n1[i + 1];&nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; nextChar = '\0';&nbsp; &nbsp; &nbsp; }通过此更改,您的程序将打印:Roman Numeral:&nbsp;CXIIINumber:&nbsp;113维托尔SRG也是正确的,你的程序缺乏验证,这是不好的。

largeQ

您的循环从 到 ,因此该行fori = 0i = n1.length - 1char&nbsp;next_char&nbsp;=&nbsp;n1[i&nbsp;+&nbsp;1];将始终导致异常。ArrayIndexOutOfBoundsException从维基百科中,罗马数字由最多三个独立的组组成:男,嗯,嗯;C, 中央, 中央, CD, D, DC, D, DCC, DCCC, DCCC, CM;X, XX, XXX, XL, L, LX, LXX, LXXX, XC;和一、二、三、四、五、六、七、八、九。我建议您单独解析它们。

一只萌萌小番薯

这会导致数组超出边界 。您可以再次模拟 for 循环以检查此索引&nbsp;&nbsp;char&nbsp;next_char&nbsp;=&nbsp;n1[i&nbsp;+&nbsp;1];
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java