2016-12-15 7 views
1

ファイルから読み込んだこれらのデータをマップに追加しようとしています。私のマップは、TreeMap<String, Student>のツリーマップです。ここで、別のクラスの学生です。私はコードmap.put(formatSNumber, student.setCourses(courses));を使ってマップに読み込んだファイル要素を追加しようとしていますが、ここでは空の型が許されません。ここでここでは無効です。エラー

sNumber = Integer.parseInt(Breader.readLine()); 
formatSNumber = String.format("%03d", sNumber); 
hours = Integer.parseInt(Breader.readLine()); 
grade = Double.parseDouble(Breader.readLine()); 
Student student = map.get(formatSNumber); 
Course course = new Course(hours, grade); 
List<Course> courses = student.getCourses(); 
courses.add(course); 
map.put(formatSNumber, student.setCourses(courses)); 
end = Breader.ready(); 

は私の完全なコードです:

import java.io.*; 
import java.util.Scanner; 
import java.util.TreeMap; 
import java.util.Iterator; 
import java.util.List; 
public class FinalProgram { 
    public static void main(String[] args) throws IOException { 
     String nameFile = " "; 
     String classFile = " "; 
     TreeMap<String, Student> map = new TreeMap<>(); 
     Scanner input = new Scanner(System.in); 

     try { 
      System.out.print("Enter the Name file(c:filename.txt): "); 
      nameFile = input.nextLine(); 
     } catch(IllegalArgumentException e) { 
      System.out.printf("Invalid input. Please enter" 
        + " filename in the form of " 
        + "c:filename.txt\n", e.getMessage()); 
     } 
     nameReader(nameFile, map); 

     try { 
      System.out.print("Enter the Class file(c:filename.txt): "); 
      classFile = input.nextLine(); 
     } catch(IllegalArgumentException e) { 
      System.out.printf("Invalid input. Please enter" 
        + " filename in the form of " 
        + "c:filename.txt\n", e.getMessage()); 
     } 
     classReader(classFile, map); 
    } 

    private static void nameReader(String file, TreeMap<String, Student> map) 
      throws IOException { 

     String nameFile = file; 
     int sNumber = 0; 
     String formatSNumber = " "; 
     String sName = " "; 

     //Instantiate FileReader and BufferedReader 
     FileReader freader = new FileReader(nameFile); 
     BufferedReader Breader = new BufferedReader(freader); 
     boolean end = Breader.ready(); 

     do { 
      sNumber = Integer.parseInt(Breader.readLine()); 
      formatSNumber = String.format("%03d", sNumber); 
      sName = Breader.readLine(); 
      Student student = new Student(sName); 
      map.put(formatSNumber, student); 
      end = Breader.ready(); 
     } while(end); 
     Iterator<String> keySetIterator = map.keySet().iterator(); 
     while(keySetIterator.hasNext()) { 
      String key = keySetIterator.next(); 
      System.out.println("key: " + key + " value: " + map.get(key).getName()); 
     } 
    } 
    private static void classReader(String file, TreeMap<String, Student> map) 
      throws IOException { 
     String classFile = file; 
     int sNumber = 0; 
     String formatSNumber = " "; 
     int hours = 0; 
     double grade = 0.0; 
     double points = grade * hours; 
     double GPA = points/hours; 

     //Instantiate FileReader and BufferedReader 
     FileReader freader = new FileReader(classFile); 
     BufferedReader Breader = new BufferedReader(freader); 
     boolean end = Breader.ready(); 

     do { 
      sNumber = Integer.parseInt(Breader.readLine()); 
      formatSNumber = String.format("%03d", sNumber); 
      hours = Integer.parseInt(Breader.readLine()); 
      grade = Double.parseDouble(Breader.readLine()); 
      Student student = map.get(formatSNumber); 
      Course course = new Course(hours, grade); 
      List<Course> courses = student.getCourses(); 
      courses.add(course); 
      map.put(formatSNumber, student.setCourses(courses)); 
      end = Breader.ready(); 
     } while(end); 

     points = grade * hours; 
     GPA = points/hours; 
    } 
} 

Studentクラス:

import java.util.ArrayList; 
import java.util.List; 
public class Student { 
    private String name = " "; 
    private List<Course> courses = new ArrayList<>(); 
    public Student(String name) { 
     this.name = name; 
    } 
    public Student(String name, List courses) { 
     this.name = name; 
     this.courses = courses; 
    } 
    public List getCourses() { 
     return courses; 
    } 
    public void setCourses(List courses) { 
     this.courses = courses; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getName() { 
     return name; 
    } 
} 

コースクラス:

public class Course { 
    private int hours = 0; 
    private double grade = 0.0; 
    public Course(int hours, double grade) { 
     this.hours = hours; 
     this.grade = grade; 
    } 
    public void setHours(int hours) { 
     this.hours = hours; 
    } 
    public int getHours() { 
     return hours; 
    } 
    public void setGrade(double grade) { 
     this.grade = grade; 
    } 
    public double getGrade() { 
     return grade; 
    } 
} 
+0

student.getCourses(courses)の戻り値の型はList です。しかし、地図は学生を価値あるものにしたい。 – Stefan

答えて

2

のアイデアを約その地図に何かを入れているを置きます。

さらに正確には、(nullでない)キーと値オブジェクトを提供します。

put()が期待する "値"パラメータには、student.setCourses(courses)が引数として使用されています。

この引数はの式です。そしてその表現の結果は、の メソッド呼び出しの結果になります。

このメソッドは、(空白はありません)を返さないように、に定義されています。

明らかにはありません。は、何かと同じではありません。それがコンパイラがあなたに伝えようとしていることです。

2種類の溶液:

  1. 変更学生オブジェクトを渡す

    そのメソッドのsetCourses()このよう

Student setCourses(... { 
.... 
    return this; 
} 

(あなたがより良いオプション1のために行きます。 2本質的に汚いハック、悪い練習の多くです)

3

map.put(formatSNumber, student.setCourses(courses))で第二引数の型が学生でなければなりません。 。 student.setCourses(courses)は、戻り値の型がvoid、つまり戻り値がないセッターメソッドです。これは一致しません。

たとえば、map.put("someString", new Student("name"))、またはmap.put("someString", student)のようになります。ここで、studentのタイプはStudentです。

+0

私はここで少し圧倒されていると感じています。私は 'Course'オブジェクトを' Student'オブジェクトコレクションに追加しようとしています。ここでは構文が分かりません。 –

+0

私はそれがあなたが欲しいものかどうかはわかりませんが、試してみてください:リスト courses = student.getCourses(); courses.add(コース); map.put(formatSNumber、student);次のようにすることもできます:student.getCourses()。add(course); map.put(formatSNumber、student)。同じです。 – Stefan

+0

マップに入り、「学生」にアクセスするにはどうすればいいですか? 私はこのようなマップに行きたい: studentID(formatSNumber)を引き上げて、それに対応する 'student'オブジェクトのコースを表示します。 –

関連する問題