-1
public static void main(String args[]){


            new Converter(); 
//the converter()  method reads a csv file that pass it to an array of String
// called stringList;  where in stringList is a  static variable;

    ArrayList<Student> list = new ArrayList<Student>(5);
    String p[] = null;
    Student stud = null;
    for(int z = 0; z < stringList.length; z++){
        p = stringList[z].split(",");

        id = Integer.parseInt(p[0]);

        yr = Integer.parseInt(p[5]);

        fname = p[1];

        gname = p[2];

        mname = p[3].charAt(0);

        course = p[4];

        stud = new Student(id,yr,fname,gname,mname,course);
        studs = stud;

上記の変数の現在の値を表示して、学生オブジェクトと比較しようとしました

    System.out.println(id +" "+ yr +" "+ fname + " "+gname + " "+mname + " "+course +"  should be the same with : " +stud.toString());
        list.add(studs);    // add the student object to the list

    }  //end of the for loop

次に、Arraylist に値が 1 つしか表示されないことに気付きました。

    for (int c = 0; c<list.size(); c++){
        System.out.println(" @list "+c+": "+list.get(c));
    }
} // end of main method

通常は 100 以上のアイテムを読み取りますが、この例では 5 つだけにしました。これはプログラムの出力です。

      2123259 1 AVILA JEREMY RAYMUND T BSIT should be the same with :    2123259,AVILA,JEREMY RAYMUND,T,BSIT,1
      2124919 1 BEROÑA MAYNARD W BSIT should be the same with : 2124919,BEROÑA,MAYNARD,W,BSIT,1
      2124679 1 CABRERA JERSON RHOD D BSIT should be the same with :      2124679,CABRERA,JERSON RHOD,D,BSIT,1
      2124905 1 CABRILLAS ARMANDO JR. B BSIT should be the same with : 2124905,CABRILLAS,ARMANDO JR.,B,BSIT,1
      2123400 1 CARIÑO JVANZ S BSIT should be the same with : 2123400,CARIÑO,JVANZ,S,BSIT,1

      @list 0: 2123400,CARIÑO,JVANZ,S,BSIT,1
      @list 1: 2123400,CARIÑO,JVANZ,S,BSIT,1
      @list 2: 2123400,CARIÑO,JVANZ,S,BSIT,1
      @list 3: 2123400,CARIÑO,JVANZ,S,BSIT,1
      @list 4: 2123400,CARIÑO,JVANZ,S,BSIT,1

ここでの私の問題は、スタッド オブジェクトが正しい値を読み取っているかどうかを確認するために Stud オブジェクトを表示しようとしたことです。実際に正しく表示され、値を割り当てた後、リストに追加します。しかし、何かが私を混乱させ、リストに配列の最後の項目しか含まれていない理由を理解できませんでしたか? 私を助けてください、私は2晩立ち往生しています。

これは私のコード全体であり、メインに焦点を当てています

パブリック クラス コンバーター {

    private static ArrayList<Student> students;
    private static String[] stringList;
    private static Scanner fr;
    private static int size;
    private static int id;
    private static int yr;
    private static String fname;
    private static String gname;
    private static char mname;
    private static String course;


public static void main(String args[]){
    ArrayList<Student> list = new ArrayList<Student>(5);
    new Converter();
    String p[] = null;
    Student stud = null;


    students = new ArrayList<Student>(stringList.length);
    for(int z = 0; z < stringList.length; z++){
        p = stringList[z].split(",");
        id = Integer.parseInt(p[0]);
        yr = Integer.parseInt(p[5]);
        fname = p[1];
        gname = p[2];
        mname = p[3].charAt(0);
        course = p[4];
        stud = new Student(id,yr,fname,gname,mname,course);

        System.out.println(id +" "+ yr +" "+ fname + " "+gname + " "+mname + " "+course +" should be the same with : " +stud.toString());
        list.add(stud);

    }  // end of for loop
    for (int c = 0; c<list.size(); c++){
        System.out.println(" @list "+c+": "+list.get(c));
    } // end of second loop
}// end of main
public Converter(){

    readStudtentsCSV();
    id = 0;
    yr = 0;
    fname = "";
    gname = "";
    mname = ' ';
    course = "";
}
 public static void readStudtentsCSV() {
        int s = 0;
        try {
            size = countLines("test.csv");
            stringList = new String[size];
            fr = new Scanner(new File("test.csv"));  
        } catch(Exception e){
            e.printStackTrace();
        }

        while (fr.hasNextLine()){
            stringList[s] = fr.nextLine();
            //System.out.println(stringList[s]);
            s++;

        }
    }
 public static int countLines(String eFile) throws Exception{

        Scanner fScan = new Scanner(new File(eFile));
        int count =0;
        while (fScan.hasNextLine()){
        count += 1;
        String line = fScan.nextLine();
        }
        fScan.close();
        return count;
    }

}

4

2 に答える 2

1

id変数, yr, fname, ... をループの反復ごとに常に上書きしています。これらの変数は、おそらくStudentクラスのフィールドとしても直接使用されます。ループの反復ごとに新しい変数を使用するようにしてください。

for(int z = 0; z < stringList.length; z++){
    p = stringList[z].split(",");

    int id = Integer.parseInt(p[0]);

    int yr = Integer.parseInt(p[5]);

    String fname = p[1];

    String gname = p[2];

    char mname = p[3].charAt(0);

    String course = p[4];

    Student stud = new Student(id,yr,fname,gname,mname,course);
    System.out.println(id +" "+ yr +" "+ fname + " "+gname + " "+mname + " "+course +"  should be the same with : " +stud.toString());
    list.add(stud);    // add the student object to the list

}  //end of the for loop
于 2013-07-10T22:21:56.533 に答える