Java中从类返回数组
从方法返回的数组包含不需要的值。我不知道为什么 这是DriverExam类:Java中从类返回数组,java,arrays,Java,Arrays,从方法返回的数组包含不需要的值。我不知道为什么 这是DriverExam类: public class DriverExam { private char[] answer = {'B','D','A','A','C','A','B','A','C','D', 'B','C','D','A','D','C','C','B','D','A'}; private char[] stuAnswer = new char[20
public class DriverExam
{
private char[] answer = {'B','D','A','A','C','A','B','A','C','D',
'B','C','D','A','D','C','C','B','D','A'};
private char[] stuAnswer = new char[20];
private int totalCorrect = 0;
private int[] missed = new int[20];
public DriverExam(char stuAnswer[])
{
for (int i = 0; i < stuAnswer.length; i++)
{
this.stuAnswer[i] = stuAnswer[i];
}
}
public int gettotalCorrect()
{
int k = 0;
for (int i = 0; i < stuAnswer.length; i++)
{
if (stuAnswer[i] == answer[i])
totalCorrect++;
}
return totalCorrect;
}
public int gettotalIncorrect()
{
return 20-totalCorrect;
}
public int[] getMissed()
{
int k = 0;
for (int i = 0; i < stuAnswer.length; i++)
{
if (stuAnswer[i] != answer[i])
{
missed[k] = i;
k++;
}
}
return missed;
}
}
公共类driverxam
{
私有字符[]答案={B','D','A','C','A','B','A','C','D',
‘B’、‘C’、‘D’、‘A’、‘D’、‘C’、‘C’、‘B’、‘D’、‘A’;
私有字符[]stuAnswer=新字符[20];
私有整数totalCorrect=0;
私有整数[]缺失=新整数[20];
公共驱动器REXAM(char stuAnswer[])
{
for(int i=0;i
这是主程序:
import java.util.Scanner;
public class Main6
{
public static void main(String[] args)
{
char[] answer = new char[20];
int[] missed2;
String str;
Scanner keyboard = new Scanner(System.in);
for (int i = 1; i <= 20; i++)
{
System.out.println("Enter the answer for question #"+i);
str = keyboard.nextLine();
while (Character.toUpperCase(str.charAt(0)) != 'A'
&& Character.toUpperCase(str.charAt(0)) != 'B'
&& Character.toUpperCase(str.charAt(0)) != 'C'
&& Character.toUpperCase(str.charAt(0)) != 'D')
{
System.out.println("Your input is invalid. Only accept A, B, C, or D");
System.out.println("Enter the answer for question #"+i);
str = keyboard.nextLine();
}
answer[i-1] = Character.toUpperCase(str.charAt(0));
}
DriverExam de = new DriverExam (answer);
System.out.print("***FINAL RESULT:");
System.out.print("\nTotal correct answers: "+de.gettotalCorrect());
System.out.print("\nTotal incorrect answers: "+de.gettotalIncorrect());
System.out.print("\nQuestions missed: ");
missed2 = de.getMissed();
for (int i = 0; i < missed.length; i++)
{
System.out.print(i+" ");
}
}
}
import java.util.Scanner;
公共类main 6
{
公共静态void main(字符串[]args)
{
字符[]答案=新字符[20];
int[]d2;
字符串str;
扫描仪键盘=新扫描仪(System.in);
对于(int i=1;i您希望“missed”是一个可变长度的结果。要对数组执行此操作,您需要一个表示结果结束的值。在这里,我使用了-1
public int[] getMissed()
{
int k = 0;
for (int i = 0; i < stuAnswer.length; i++)
{
if (stuAnswer[i] != answer[i])
{
missed[k] = i;
k++;
}
}
if(k < missed.length)
{
missed[k] = -1
}
return missed;
}
public int[]getMissed()
{
int k=0;
for(int i=0;i
然后,在for循环中检查结束值。奇怪的值可能是由于没有在数组中显式设置它们而导致的默认int值
for (int i = 0; i < missed2.length && missed2[i] != -1; i++)
{
System.out.print(i+" ");
}
for(int i=0;i
我甚至不知道最后一个循环是如何编译的,因为missed
没有在该范围内声明。不管怎样,这看起来都是一个很好的机会让你熟悉调试器的使用。@Davidmissed
是该方法所属的DriverExam
类中的一个字段。@realpoint:对,这是Main6
类中的main()
方法超出范围。打印时,您打印的是索引(i
),而不是missed
的内容。我投票将其作为一个打字错误关闭。@realpoint:嗯,这不仅仅是打字错误。因为“问题遗漏了”仍在迭代20次,而根据预期的结果,它应该只迭代14次。但是,由于给定的代码甚至没有编译,因此产生此输出的实际代码是什么样子的,这实际上是任何人的猜测。此外,如上面的注释所述,输出应该打印missed2
(不是missed
)而不是i
的索引。