2015-09-04 48 views
-2

在下面的代码中,我尝试获取所有主题的评分。我通过for循环获取输入。但我应该将等级(例如“C”)存储在等级数组中,但我得到一个NullPointerException。我不明白我的代码有什么问题,因为我认为这很好。 另外,由于它们是瑞典语,因此忽略主题的名称。for循环中的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(); 
    } 


} 
+2

不是NullPointerException的原因,但最后一次迭代将尝试访问'gradeName [gradeName.length]',因为索引是从零开始的,所以出界。使用'i

+1

数组索引以'0'开始并以'length-1'结尾 –

回答

0

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

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

而且在for循环for(int i = 0; i <= gradeName.length; i++)
在病症使用的唯一的“<”而不是“< =”这样
for(int i = 0; i < gradeName.length; i++)
因为0是第一个索引和大小-1是最后一个指数。

0

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

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

其实我更喜欢你的情况使用ArrayList而不是数组。