【问题标题】:Java null point exception error [duplicate]Java空点异常错误[重复]
【发布时间】:2018-03-01 02:48:07
【问题描述】:

我很困惑!! 在我的问题类中,我试图在一个数组中打印一个问题,并将相应的多项选择答案存储在一个单独的二维数组中。我把它放在一个循环中,并从 main 方法传递 int row 并尝试获取用户输入并将其传递回我的 Question 类。可能没有意义,但我得到一个空点错误。 这是我所有的代码

public class Question{
    private int selectedAnswer;
    public String[] questions =
    {
        "Favourite sweet",
        "Favourite subject at Hogwarts",
        "Dream vacation",
        "Favourite Drink",
        "Dream House",
        "What do you desire the most?",
        "Favourite dress robe colour",
        "Pick a muggle career",
        "Pick a creature"
    };

private String[][] options =
{
    {"1.Acid Pops","2.Sherbert Lemons","3.Bertie Bott's Every Flavour Beans", 
    "4.Cake","5.Hagrid's Rock Cakes","6.Chocolate Frogs","7.Ginger Newt",
    "8.I hate sweets"},

    {"1.Care of Magical Creatures","2.Charms","3.Defense Against the Dark Arts",
    "4.Divination","5.Herbology","6.History of Magic","7.Muggle Studies","8.Potions",
    "9.Study of Ancient Runes","10.Transfiguration"},

    {"1.Anywhere with friends","2.Egypt","3.Hogwarts","4.Museum","5.India","6.Forest",
    "7.Can't be bothered with a vacation"},

    {"1.Unicorn blood", "2.Pumpkin Juice", "3.Butter beer", "4.Coca-Cola", "5.Tea", "6.Coffee", "7.Brandy"},

    {"1.The Burrow", "2.A Cottage", "3.Thirteen Grimmauld Place", "4.Malfoy Manor"},

    {"1.Friends", "2.Success", "3.Money", "4.Power"},

    {"1.Black", "2.Red", "3.Pink", "4.Green", "5.Orange", "6.Blue"},

    {"1.Lawyer", "2.Teacher", "3.Social Worker", "4.Prime Minister", "5.Google Employee"},

    {"1.Centaur", "2.Basilisk", "3.Unicorn", "4.Thestral", "5.Phoenix", "6.Hippogriff", "7.Dementor"}

 };
    private String[] quizQuestion;
    private String[][] quizOptions; 
//new update:
    private String quizQuestion;
    private String[] quizOptions

    public Question(int row){

      for(int i= row; i< questions.length; i++){
        **quizQuestion[i] = questions[i];** //null point error
          quizQuestion = questions[i]; // new update
        for(int j = row; j < options[i].length; j++){
            quizOptions[i][j] = options[i][j];
            quizOptions[i] = options[i][j];  // new update

            } 
         }
      }

    public String[] getQuizQuestion(){
       **return this.quizQuestion;** //null point error
    } 
    public String[][] getQuizOptions(){
      return this.quizOptions;
    }
    public void setSelectedAnswer(int userInput){
       selectedAnswer = userInput;
    }
}

主要方法

import java.util.Scanner;
public class Main{
public static void main(String[] args){
    Question q = new Question(0);
    System.out.println(q.getQuizQuestion());
    System.out.println(q.getQuizOptions());

    Scanner keyboard = new Scanner (System.in);
    int userInput = keyboard.nextInt(); 
    System.out.println("Select an answer: ");
    q.setSelectedAnswer(userInput);

   }
}

【问题讨论】:

  • 您的 quizQuestion 和 quizOptions 未初始化,默认设置为 null。所以,你看到的是 NPE。

标签: java arrays nullpointerexception


【解决方案1】:

你必须先创建一个数组才能填充它。

public Question(int row){
   quizQuestion = new String[ <expected length> ]; 
   quizOptions = new String[ <expected length> ][]; //Outer array

  for(int i= row; i< questions.length; i++){
    **quizQuestion[i] = questions[i];** //null point error
    quizOptions[i] = new String[]; //Each inner array
    for(int j = row; j < options[i].length; j++){
        quizOptions[i][j] = options[i][j];
        } 
     }
  }

但是,据我所知,quizQuestion 应该只是一个字符串。并且 quizOptions 应该是一个字符串数组。如果 Question 对象只包含一个问题的详细信息,则问题应该是一个字符串,并且选项应该只是该问题的选项。

更新:

private String quizQuestion;
private String[] quizOptions

public Question(int row){
    quizQuestion = questions[row]; 
    quizOptions = new String[options[row].length]; 
    for(int j = 0; j < options[row].length; j++){
        quizOptions[j] = options[row][j];  

    } 
  }

public String getQuizQuestion(){
   return this.quizQuestion;
} 
public String[] getQuizOptions(){
  return this.quizOptions;
}

另外,您可能根本不需要复制选项:

private String quizQuestion;
private String[] quizOptions

public Question(int row){
    quizQuestion = questions[row]; 
    quizOptions = options[row]; //Just refer to the existing piece
  }

public String getQuizQuestion(){
   return this.quizQuestion;
} 
public String[] getQuizOptions(){
  return this.quizOptions;
}

【讨论】:

  • 你说得对 Teddy 它应该是 quizQuestion 的字符串和 quizOptions 的数组。所以我把它改成了那个。但问题是 quizOptions 的每个多项选择答案长度都是不同的。所以我不知道将它初始化为什么
  • 你可以 quizOptions[i] = new String[ options[i].length ]; //每个内部数组
  • 很抱歉成为害虫,但我现在收到此错误:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 4 at Question.(Question.java:51) at Main.main (Main.java:4) 来自 quizOptions[i] = options[i][j];
  • 请在问题中添加“编辑”并添加您当前的代码,我会检查它。
  • 更新了我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
  • 2017-10-10
  • 2018-04-23
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多