Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中从类返回数组_Java_Arrays - Fatal编程技术网

Java中从类返回数组

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

从方法返回的数组包含不需要的值。我不知道为什么

这是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];
    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
没有在该范围内声明。不管怎样,这看起来都是一个很好的机会让你熟悉调试器的使用。@David
missed
是该方法所属的
DriverExam
类中的一个字段。@realpoint:对,这是
Main6
类中的
main()
方法超出范围。打印时,您打印的是索引(
i
),而不是
missed
的内容。我投票将其作为一个打字错误关闭。@realpoint:嗯,这不仅仅是打字错误。因为“问题遗漏了”仍在迭代20次,而根据预期的结果,它应该只迭代14次。但是,由于给定的代码甚至没有编译,因此产生此输出的实际代码是什么样子的,这实际上是任何人的猜测。此外,如上面的注释所述,输出应该打印
missed2
(不是
missed
)而不是
i
的索引。