2013-08-20 91 views
0

我正在編寫一些代碼來幫助教我如何在java和我的代碼中使用數組。我有一個錯誤,我無法弄清楚它爲什麼會發生。 守則:在代碼中找不到錯誤

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(); 
} 
} 

的錯誤是這樣的:

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) 

預先感謝任何幫助,你可以給。請記住,這只是一個試用程序,我仍然在學習java。

OK我還有一個問題,這個時候它說:

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) 

,我已經更新了以往其他代碼。

回答

3

此時,內部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包含值-1其是用於陣列的無效索引。

它來自

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 
    ... 
} 

編輯

你所得到的NPE歸結爲

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

你還沒有初始化answers[questionNumArray]所以它是null。首先執行以下操作:

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

好的謝謝。我有另一個問題,那就是我得到另一個問題 – user2682894

+0

@ user2682894不客氣,但我們不是一個調試工廠。當你得到這樣的例外時使用調試器。 –

+0

我在eclipse上找不到一個,其他解釋對其他項目很有幫助。 – user2682894