2016-08-12 75 views
0

每条线由三部分信息组成,由whitespace分隔:name(String类型),ID(String类型)和gpa(double类型)。建筑类学生

我试图写一个程序,读取整数N和一个文件名,然后从输入文件中读取N行数据,将数据存储在学生ArrayList中。你可以假设在这个问题中给出了Student类。我在代码中遇到了一些问题,并且遇到了13个错误。如果任何人都可以提供帮助,那会很棒

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.InputMismatchException; 
import java.util.Scanner; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

public class Students { 

    public static void main(String[] args) { 
     ArrayList<Student> students = new ArrayList<Student>(); //this will be a list of all the students in the file 
     //we will add to this list as we read in students from the file 
     //using an ArrayList allows us to easily add students when we don't know how many there will be 
     Scanner stu = new Scanner(System.in); 
     Student s = null; 

     /*Part two: get the file name and intialize the file reader*/ 
     try{ 
      System.out.print("Enter filename: "); //prompt the user for the file name 
      filename = in.readLine(); //get the filename- user types this on the keyboard 

      fin = new BufferedReader(new FileReader(filename)); //create the file reader 
      //if the filename is invalid, an error message will be printed and the program terminated 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     /*Part three: read all of the student data from the file*/ 
     s = getStudent(fin); //call the getStudent function to get the next student from the file 
     while(s != null){ //keep going until all students have been read 
      students.add(s); //add the new student to our ArrayList of students 
      s = getStudent(fin); //get the next student 
     } 


     /*Part four: print out the results*/ 
     for(Student a: students){ //loop through all the students in our list 
      System.out.println(a.getFirstName()); //print out name 
      System.out.println(a.getId()); //print out ID number 
      System.out.println("Gpa: " + a.getGrade()); //print out gpa 



    } 
} 
} 

Test case 

Enter an integer: 3 
Enter a filename: students.txt 
[Wally 1234567 4.5, John 7654321 3.0, Susan 1212121 4.5] 
+0

需要 “在” 声明变量, “鳍” – ravthiru

+0

为什么我有 “在” 申报?不是Scanner的一部分 –

+0

[Scanner](https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html)类没有readLine()方法,也许你'想要[BufferedReader](https://docs.oracle.com/javase/7/docs/api/java/io/BufferedRead er.html#readLine())'in'。在使用它之前,必须向JVM声明什么是“in”。 – davedwards

回答

1

这就是我想出了跑在本地,它的工作原理..

package tes; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.ArrayList; 
import java.util.Scanner; 

class Student { 

    private String name; 
    private String ID; 
    private Double gpa; 
    public Double getGpa() { 
     return gpa; 
    } 
    @Override 
    public String toString() { 
     return "Student [name=" + name + ", ID=" + ID + ", gpa=" + gpa + "]"; 
    } 
    public void setGpa(Double gpa) { 
     this.gpa = gpa; 
    } 
    public String getID() { 
     return ID; 
    } 
    public void setID(String ID) { 
     this.ID = ID; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 
public class Students { 


    public static void main(String[] args) { 

     try{ 


      ArrayList<Student> students = new ArrayList<Student>(); 
      Scanner scanner = new Scanner(System.in); 
      System.out.print("Enter filename: "); //prompt the user for the file name 
      String fileName = scanner.next(); 
      File file = new File(fileName); 

      if (!file.exists()) { 
       throw new FileNotFoundException("file not exits"); 
      } 

      BufferedReader reader = new BufferedReader(new FileReader(file)); 
      String currentline = ""; 
      while ((currentline = reader.readLine()) != null) { 

       String[] linearray = currentline.split(","); 
       for (int i=0;i<linearray.length;i++) { 
         String record = linearray[i]; 
         String[] r1 = record.split(" "); 
         Student student = new Student(); 
         student.setName(r1[0]); 
         student.setID(r1[1]); 
         student.setGpa(Double.parseDouble(r1[2])); 
         students.add(student); 
       } 

      }  

      System.out.println(students); 



     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     } 
} 

与数据输入文件:

  • 沃利1234567 4.5,约翰7654321 3.0,苏珊1212121 4.5
  • Sally 934567 3.75,Brown 7654321 4.0,Lilly 2212121 4.5

输出:

Enter filename: C:\Users\yc03ak1\Desktop\testing.txt 
[Student [name=Wally, ID=1234567, gpa=4.5], Student [name=John, ID=7654321, gpa=3.0], Student [name=Susan, ID=1212121, gpa=4.5], Student [name=Sally, ID=934567, gpa=3.75], Student [name=Brown, ID=7654321, gpa=4.0], Student [name=Lilly, ID=2212121, gpa=4.5]] 

HTH ..

+0

由于某种原因,我得到错误 –

+0

Students.java:38:找不到符号 symbol:method setID(java.lang.String) location:class tes.Student student.setID(r1 [1]); –

+0

检查ID字段它应该是相同的两个类,并且可以检查两个类是否在同一个包中? – user641887