2017-03-27 31 views
0

我有一个名为亚军类,它看起来是这样的:Java - 如何使用bufferedReader和Scanner将数据读入列表?

public class Runner 
{ 
    private static int nextNumber= 1; 

    private int number;  
    private String name;  
    private String ageGroup; 
    private int time;   


    public Runner() 
    { 
     super(); 
     this.name = ""; 
     this.ageGroup = "standard"; 
     this.time = 0; 
     this.number = nextNumber++; 
    } 

它还包括标准的getter和setter方法。 在另一个类中,我试图编写一个方法,用于从文本文件中读取数据并将数据分配给列表。我的方法目前看起来是这样的:

public void readInRunners() 
    { 
     String pathname = OUFileChooser.getFilename(); 
     File aFile = new File(pathname); 
     Scanner bufferedScanner = null; 
     List<Runner> runners = new ArrayList<>(); 

     try 
     { 
     String name; 
     int age; 
     String ageGroup; 
     Scanner lineScanner; 
     String currentLine; 
     bufferedScanner = new Scanner(new BufferedReader(new FileReader(aFile))); 

     while (bufferedScanner.hasNextLine()) 
     { 
      currentLine = bufferedScanner.nextLine(); 
      lineScanner = new Scanner(currentLine); 
      lineScanner.useDelimiter(","); 
      name = lineScanner.next(); 
      age = lineScanner.nextInt(); 

      if(age < 18) 
      { 
       ageGroup = ("junior"); 
      } 

      else if(age >= 55) 
      { 
       ageGroup = ("senior"); 
      } 

      else if(age >= 18 && age < 55) 
      { 
       ageGroup = ("standard"); 
      } 

      runners.add(new Runner(name, ageGroup)); 
     } 
     } 

     catch (Exception anException) 
     { 
     System.out.println("Error: " + anException); 
     } 

     finally 
     { 
     try 
     { 
      bufferedScanner.close(); 
     } 
     catch (Exception anException) 
     { 
      System.out.println("Error: " + anException); 
     } 
     } 

我在这条线得到一个错误:

runners.add(new Runner(name, ageGroup)); 

我知道那是因为不兼容的说法是没有编制,但我不知道该如何否则这句话。

任何意见将不胜感激。

+0

它诚实地看起来像你的问题不是从文件读取。 –

+0

只需要注意,你不需要'this.time = 0;','time'已经被初始化为'0'(int变量的默认值)。 – Berger

回答

0

我认为你应该添加一个构造

public Runner(String name, String age) 
    { 
    this.name = name, 
    this.age= age; 
    } 

你只有空的构造

public Runner(){// some code} 
0

你需要有一个参数化的构造就像你亚军类

public Runner(String name,String ageGroup) 
    { 
     this.name = name; 
     this.ageGroup = ageGroup; 
     this.time = 0; 
     this.number = nextNumber++; 
    } 
+0

是否有任何理由可能会导致错误:在执行此操作后,“变量ageGroup可能未初始化”? – aTubOfAdam

+0

在try块内部,你需要初始化String ageGroup =“”;因为所有的赋值语句都在if/else块内 – amudhan3093

+0

尝试从文件中读取后打印年龄。您将知道错误 – amudhan3093

0

只需将这些参数添加到runner类中的构造函数中:

public Runner(String name, String ageGroup) 
    { 
     super(); 
     this.name = name; 
     this.ageGroup = ageGroup; 
     this.time = 0; 
     this.number = nextNumber++; 
    } 
相关问题