我的代码出现错误,我该如何解决这个问题。基本上,从字符串中提取第二个字符(如果存在)的最佳(入门级)方法是什么。
编辑:错误是
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 1
at java.lang.String.charAt(String.java:686)
at RomanNumeral.main(RomanNumeral.java:38)
我的代码:
import java.util.Scanner;
public class RomanNumeral {
public static void main(String[] args) {
// Declare Variable
int total = 0, length = 0;
int first;
int second;
String romanNumerals;
// Declare Scanner
Scanner in = new Scanner(System.in);
// Get Input
System.out.println("Please input a Roman Numeral: ");
romanNumerals = in.next();
length = romanNumerals.length();
while (length != 0) {
first = valueFinder(romanNumerals.charAt(0));
if (length > 1) {
second = valueFinder(romanNumerals.charAt(1));
} else {
second = 0;
}
if (first >= second || length == 1) {
total += first;
romanNumerals = romanNumerals.substring(1);
System.out.println(romanNumerals);
}// End of if
else {
total += (second - first);
romanNumerals = romanNumerals.substring(2);
System.out.println(romanNumerals);
}// End of Else
}// End of loop
System.out.println(total);
}// End of Main Method
// valueFinder Method
public static int valueFinder(char numeral) {
int value = 0;
switch (numeral) {
case 'I':
value = 1;
break;
case 'V':
value = 5;
break;
case 'X':
value = 10;
break;
case 'L':
value = 50;
break;
case 'C':
value = 100;
break;
case 'D':
value = 500;
break;
case 'M':
value = 1000;
break;
default:
System.out.println(numeral
+ " is not a Roman Numeral, and will be ignored.");
break;
}// End of Switch
return value;
}// End of Method
}// End of Class
最佳答案
在获取 romanNumerals
的子字符串后,您需要更新您的 length
变量。当你对它进行子串化时,字符串本身会变得越来越短,但你所指的长度数字却不会。在需要时调用 string.length() 方法会更简单,因为这样就无需维护 length
变量。
或者,创建另一个方法来修改字符串和长度计数器(将其命名为 subStringAndUpdateLength()
)。但这就太过分了。
关于java - 类作业出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962169/