我正在为我的类编写一个程序,该程序从命令行(java A D C B等)获取参数并将它们与字符数组进行比较。在这种情况下,它是考试的关键,命令行参数是答案。我想我几乎弄明白了,但是已经遇到了一个arrayIndexOutofBoundsException:1。我对命令行参数不是很熟悉,所以我可能会遗漏一些重要的东西,但这些信息在我的java书中没有涉及。任何意见,将不胜感激。提前谢谢。
代码:
public class GradeExam {
/** Main method */
public static void main(String args[]) {
// Key to the questions
char[] keys = {'D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D'};
int correctCount = 0;
for(int i = 0; i < args.length; i++){
String newargs = args[i];
char[] argarray = newargs.toCharArray();
for (int j = 0; j < args.length; j++) {
if (argarray[j] == keys[j])
correctCount++;
}
}
System.out.println("Your correct count is " +
correctCount);
}
}
Input: java GradeExam D B D C C D A E A D
Expected output: Your correct count is 10
答案 0 :(得分:1)
如果你这样打电话给这个节目......
java GradeExam D B D C C D A E A D
...然后每个字母都是一个单独的参数(args[0] = "D"
,args[1] = "B"
等)。根据您的代码,我认为您打算这样做:
java GradeExam DBDCCDAEAD
你也可能希望你的内循环看起来像这样:
for (int j = 0; j < argarray.length && j < keys.length; j++) {
if (argarray[j] == keys[j])
correctCount++;
}
然后,即使命令行参数包含太多或太少的字母,您也不会在任何一个数组的末尾运行。
答案 1 :(得分:0)
你在这一行得到arrayIndexOutofBoundsException: 1
:
if (argarray[j] == keys[j])
因为argarray
始终只有一个元素,j
从0...args.length
获取值。
此外,您根本不需要内部循环,您可以像这样简化程序:
public static void main(String args[]) {
char[] keys = {'D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D'};
int correctCount = 0;
for (int i = 0; i < args.length && i < keys.length; i++) {
if (args[i].charAt(0) == keys[i]) {
correctCount++;
}
}
System.out.println("Your correct count is " + correctCount);
}
答案 2 :(得分:0)
问题是:
char[] argarray = newargs.toCharArray();
for (int j = 0; j < args.length; j++) {
if (argarray[j] == keys[j])
correctCount++;
}
您实际上是在尝试将当前正在查看的String参数转换为字符数组,而实际上您应该将String参数转换为单个字符。将它转换为角色后,您可以将其与您正在查看的当前密钥进行比较。
您可能希望在开头做一些检查,以确保给出的答案数量等于键数,如下所示。
public class GradeExam {
public static void main(String[] args) {
char[] keys = {'D', 'B', 'D', 'C', 'C', 'D', 'A', 'E', 'A', 'D'};
if (args.length != keys.length) {
throw new RuntimeException("Expected number of input answers: " + keys.length + " but got " + args.length);
}
int correctCount = 0;
try {
for (int i = 0; i < keys.length; i++) {
char key = keys[i];
// We need to convert the String into a character
char answerChar = args[i].charAt(0);
if (answerChar == key) {
correctCount++;
}
}
} catch (IndexOutOfBoundsException ex) {
ex.printStackTrace();
}
System.out.println("Your correct count is " + correctCount);
}
}