用循环创建单独的对象

时间:2013-12-09 04:14:59

标签: java object text arraylist while-loop

我正在创建一个比赛结果程序,我需要存储来自文本文件的所有信息,如下所示:

  

------ 1 Jackson Bertoli 11 Jasper 15.29 ----------------------------------- -------------------------------------------------- ----

如您所见,它包含地点,名字,姓氏,成绩,学校名称和时间。 这些信息需要存储在一起,所以我认为最好的方法是将它存储在对象“runner”中,然后将所有这些“runner”对象放在arraylist中。唯一的问题是我无法找到如何为每个单独的运行器中的每个对象(通过每行读取文本文件中的元素)创建不同的对象名称。是否有必要为每个对象设置不同的对象名称?如果允许我拥有许多具有相同名称的单独对象,我如何区分它们?这是它背后的一些代码

public void readfile() {
    while (initialresults.hasNext()){

        strplace = initialresults.next();
        dataplace = Integer.parseInt(strplace);

        datafirstname = initialresults.next();

        datalastname = initialresults.next();

        strgrade = initialresults.next();
        datagrade = Integer.parseInt(strgrade);

        dataschool = initialresults.next();

        strorigtime = initialresults.next();
        dataorigtime = Double.parseDouble(strorigtime);

        runner newrunner = new runner(datafirstname,datalastname, datagrade, dataschool, dataorigtime);
        amountofrunners.add(newrunner);
        counter++;
    }
}

所以你可以看到我正在从文本文件中读取每个元素,然后尝试创建一个新的“runner”对象,将文本文件中的那些元素存储在该对象中,但后来我被困在了下一个同一对象名称中的line元素。如何在每次存储这些元素时创建新的对象名称?我使用对象的唯一原因是因为它似乎是为跑步者保持数据组织的最佳方式。但是,如果我使用数组或列表,那会不会变得杂乱无章并难以排序?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

当循环运行时,即使多次使用转轮类,每次循环迭代(运行一个循环)时,它都会创建一个新的(和不同的)转轮对象。

在行amountofrunners.add(newrunner);中,Java基本上复制了存储在newrunner中的值,并单独存储它/它们。在这种情况下,每个对象都是不同的,即使它在创建时具有相同的变量名称。

使用ArrayList实际上可以更容易地进行排序,因为您可以使用索引,foreach循环和其他功能来帮助管理存储在ArrayList中的对象。

答案 1 :(得分:0)

我认为你试图做这样的事情:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public static class Runner{
    int place;
    String firstName, lastName, school;
    double origTime, grade;

    Runner(int place,String firstName,String lastName,double grade,String school,double origTime){
        this.place = place;
        this.firstName = firstName;
        this.lastName = lastName;
        this.grade = grade;
        this.school = school;
        this.origTime = origTime;
    }
}

public static List<Runner> readfile(Scanner in) {
    List<Runner> runners = new ArrayList<Runner>(); 

    while (in.hasNext()){
        runners.add(new Runner(
            in.nextInt(), // place
            in.next(), in.next(), //first, last name
            in.nextDouble(), // grade
            in.next(), // school
            in.nextDouble() // original time
        ));
    }
    return runners;
}

public static void main(String[] args) throws IOException {
    List<Runner> runners;

    try (Scanner s = new Scanner(new BufferedReader(new FileReader("file.txt")))) {
        runners = readfile(s);
    }
    // Do something with runners
}