【问题标题】:NullPointerException in for loopfor 循环中的 NullPointerException
【发布时间】:2015-09-04 13:15:10
【问题描述】:

在下面的代码中,我尝试获取所有科目的成绩。我通过 for 循环获得输入。但是我应该将成绩(例如“C”)存储在成绩数组中,但我得到了 NullPointerException。我不明白我的代码有什么问题,因为我认为这很好。 另外,请忽略主题的名称,因为它们是瑞典语。

public class Defan{

Scanner sc = new Scanner(System.in);
String grade[];
String gradeName[] = {"Svenska1", "Svenska2", "Svenska3", "Engelska5", "Engelska 6",
        "Mattematik 1c", "Mattematik 2c", "Mattematik 3c", "Mattematik 4", "Idrott", "Samhälle", "Religion",
        "Historia", "Biologi1", "Biologi2", "Fysik1", "Fysik2", "Kemi1", "Kemi2", "Franska3", "Franska4", "Körsång1", "Körsång2"
        , "Gymnasiearbete"};

public void getInput(){
    for(int i = 0; i <= gradeName.length; i++){
        System.out.println("Enter grade for " + gradeName[i] + ": ");
        grade[i] = sc.nextLine();
    }


}

【问题讨论】:

  • 不是 NullPointerException 的原因,但最后一次迭代将尝试访问 gradeName[gradeName.length],这是超出范围的,因为索引是从零开始的。使用i &lt; gradeName.length&lt; 而不是&lt;=)或使用'enhanced for-loop' 遍历所有项目。
  • 数组的索引以0 开头,以length-1 结尾

标签: java arrays for-loop nullpointerexception


【解决方案1】:

很明显,你必须先分配等级数组! 在您的构造函数中:

final int SIZE = 1024;
grade = new String[SIZE];

实际上,在您的情况下,我更喜欢使用 ArrayList 而不是数组。

【讨论】:

    【解决方案2】:

    您正在尝试在初始化之前使用grade[] 数组。试试

    String grade[] = new String[gradeName.length] <br>
    

    在你的 for 循环中 for(int i = 0; i &lt;= gradeName.length; i++)
    在条件下仅使用 'for(int i = 0; i &lt; gradeName.length; i++)
    因为 0 是第一个索引,而 size-1 是最后一个索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多