2012-07-07 95 views
0
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class Test { 
private static ArrayList<Countries> arr =null; 
static String country; 
static String capital; 
static String cities; 
static String answer; 

public static void main(String args[]) throws IOException{ 
    Scanner keybord = new Scanner(System.in); 
    ArrayList<Countries> d = read("data.txt"); 
    String res = ""; 
    for(int i = 0; i < d.size(); i++){ 
      res += d.get(i).toString(); 
     answer = keybord.nextLine(); 
     if(answer.equalsIgnoreCase(d.get(i).getCapital())) 
      res+= "The answer is true!"; 
     else 
      res += "The answer is not true" + "The answer is " + d.get(i).getCapital(); 
     System.out.println(res); 
    } 
} 

public static ArrayList<Countries> read(String filename) throws IOException{ 
    Scanner scan = new Scanner(new File(filename)); 
    while(scan.hasNext()){ 
     country = scan.nextLine(); //System.out.println(country); 
     String cities1 = scan.nextLine(); //System.out.println(cities1); 
     String cities2 = scan.nextLine(); //System.out.println(cities2); 
     String cities3 = scan.nextLine(); //System.out.println(cities3); 
     String cities4 = scan.nextLine(); //System.out.println(cities4); 
     String capital = scan.nextLine(); //System.out.println(capital); 
     Countries c = new Countries(cities1, cities2, cities3, cities4, capital); 
     arr.add(c); // where i get the exception 
     scan.nextLine(); 
    } 
    return arr; 

}爲什麼我得到數組的空指針異常?

我不明白爲什麼我得到,而我試圖在國家添加到數組列表中的空指針異常?我不應該在創建它之前將它初始化爲null嗎?

+0

爲什麼'arr'是一個靜態字段,而不僅僅是'read'方法的一部分? – 2012-07-07 20:00:45

回答

1

您還沒有初始化arr所以默認情況下它是null

通過

private static ArrayList<Countries> arr = new ArrayList<Countries>(); 

此外初始化,

你,如果下一個元素通過

while(scan.hasNext()){ 
存在檢查

,然後你在閱讀接下來的7行

country = scan.nextLine(); //System.out.println(country); 
String cities1 = scan.nextLine(); //System.out.println(cities1); 
String cities2 = scan.nextLine(); //System.out.println(cities2); 
String cities3 = scan.nextLine(); //System.out.println(cities3); 
String cities4 = scan.nextLine(); //System.out.println(cities4); 
String capital = scan.nextLine(); //System.out.println(capital); 

scan.nextLine(); 

後者可能無法

+0

現在在代碼的頂部我初始化了它,但仍然有異常錯誤? – sergerde 2012-07-07 19:59:14

+0

請發佈更新後的代碼和新的異常堆棧跟蹤 – 2012-07-07 19:59:41

+0

新錯誤的錯誤消息是什麼? – 2012-07-07 19:59:46

0

需要初始化ARR:

private static ArrayList<Countries> arr = new ArrayList<Countries>(); 

如果省略new ArrayList<Countries>();一部分,默認值爲null,然後當你撥打arr.add()時,你會收到NullPointerException

+0

我現在做了,但仍然有類似的東西。線程「main」中的異常java.util.NoSuchElementException:在Test.read(Test。)上的java.util.Scanner.nextLine(Scanner.java:1516)處未找到行。java:41)at Test.main(Test.java:18)第一個錯誤是爲這一行String cities4 = scan.nextLine(); //System.out.println(cities4);另一個是ArrayList d = read(「data.txt」); – sergerde 2012-07-07 20:08:33

+0

謝謝大家!它的工作。 – sergerde 2012-07-07 20:16:31

0

ARR變量沒有初始化,與

private static ArrayList<Countries> arr = new ArrayList<Countries>(); 
0

你永遠不會初始化arr取代

private static ArrayList<Countries> arr 

arr = new ArrayList<Countries>();添加到您的main

相關問題