简体   繁体   中英

Can't find the error in the code

I am writing some code to help teach me how code in java and I have been using arrays. I have an error that I can't work out why it is occurring. The Code:

import java.util.Scanner;
public class pubQuizArray {
private static Scanner kb = new Scanner (System.in);
static String[] questions;
static String[][] answers;
static char[] realAnswers;
static char ans;
static char yn;
static int questionNum;
static int questionNumArray;
static int numQ;
static int score = 0;

public static void writeQuiz()
{
    getQNum();
    getQ();
}

public static void getQNum()
{
    System.out.println("How many Questions?");
    numQ = kb.nextInt();
    questions = new String[numQ];
}

public static void getAns()
{
    questionNumArray = questionNum - 1;
    answers = new String[numQ][];
    System.out.println("What are the answers?");

    System.out.println("a: ");
    answers[questionNumArray][0] = kb.nextLine();

    System.out.println("b: ");
    answers[questionNumArray][1] = kb.nextLine();

    System.out.println("c: ");
    answers[questionNumArray][2] = kb.nextLine();

    System.out.println("d: ");
    answers[questionNumArray][4] = kb.nextLine();

    realAnswers = new char[numQ];
    System.out.println("What is the correct Answer?");
    realAnswers[questionNum] = kb.next().charAt(0);

}

public static void getQ()
{
    questionNum = 0;
    System.out.println("What is the First Question?");
    questions[questionNum] = kb.nextLine();
    getAns();
    questionNum ++;
    while(questionNum < numQ)
    {
        System.out.println("What is the next Question?");
        questions[questionNum] = kb.nextLine();
        getAns();
        questionNum ++;
    }
}

public static void askQ()
{
    questionNum = 0;
    while(questionNum < numQ)
    {
        System.out.println("Q1: " + questions[questionNum]);

        System.out.println("a: " + answers[questionNum][0]);
        System.out.println("b: " + answers[questionNum][1]);
        System.out.println("c: " + answers[questionNum][2]);
        System.out.println("d: " + answers[questionNum][3]);

        ans = kb.next().charAt(0);
        if(ans == realAnswers[questionNum])
        {
            System.out.println("That was correct");
            score ++;
        }
    }
}

public static void menu()

{
    System.out.println("Would you like to write a new Quiz? y/n");
    yn = kb.next().charAt(0);
    while(yn == 'y')
    {
        writeQuiz();
        System.out.println("Would you like to play the Quiz? y/n");
        yn = kb.next().charAt(0);
        while(yn == 'y')
        {
            askQ();
            System.out.println("Would you like to play again? y/n");
            yn = kb.next().charAt(0);
        }
    }
}

public static void main(String[] args)
{
    menu();
}
}

The error is this:

Would you like to write a new Quiz? y/n
y
How many Questions?
10
What is the First Question?
What are the answers?
a: 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at pubQuizArray.getAns(pubQuizArray.java:34)
    at pubQuizArray.getQ(pubQuizArray.java:56)
    at pubQuizArray.writeQuiz(pubQuizArray.java:17)

Thanks in advance for any help that you can give. Please bear in mind that this is just a trial program and that I am still learning java.

OK I have another problem this time it says:

Would you like to write a new Quiz? y/n
y
How many Questions?
1
What is the First Question?
and
What are the answers?
a: a
Exception in thread "main" java.lang.NullPointerException
    at pubQuizArray.getAns(pubQuizArray.java:34)
    at pubQuizArray.getQ(pubQuizArray.java:57)
    at pubQuizArray.writeQuiz(pubQuizArray.java:17)
    at pubQuizArray.menu(pubQuizArray.java:96)
    at pubQuizArray.main(pubQuizArray.java:110)

and i've updated the other previous code.

At this point, inside getAns()

questionNumArray = questionNum - 1;
answers = new String[numQ][];
System.out.println("What are the answers?");

System.out.println("a: ");
answers[questionNumArray][0] = kb.nextLine();

questionNumArray contains the value -1 which is an invalid index for an array.

It comes from

public static void getQ()
{
    questionNum = 0; // set to 0
    System.out.println("What is the First Question?");
    questions[questionNum] = kb.nextLine();
    getAns(); // still 0 
    questionNum ++; // too late
    ...
}

Edit

The NPE you are getting boils down to

System.out.println("a: ");
answers[questionNumArray][0] = kb.nextLine();

you haven't initialized answers[questionNumArray] so it is null . Do the following first

answers[questionNumArray] = new String[someSize]; // someSize should probably be 5 looking at your code

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM