2012-07-07 91 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

相关问题