Java 使用循环创建单独的对象

Java 使用循环创建单独的对象,java,object,text,arraylist,while-loop,Java,Object,Text,Arraylist,While Loop,我正在创建一个竞赛结果程序,我需要存储文本文件中的所有信息,如下所示: 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; Str

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

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
}
------1杰克逊·贝托利11贾斯珀15.29-----------------------------------------------------------------------------------------

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

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”对象,将文本文件中的元素存储在该对象中,但我无法将下一行的元素放在同一个对象名中。如何每次创建一个新的对象名来存储这些元素?我使用对象的唯一原因是,它似乎是为跑步者组织数据的最佳方式。但是如果我使用一个数组或一个列表,这会不会变得杂乱无章,难以排序?提前感谢您的帮助。

当循环运行时,即使runner类被多次使用,它也会在循环每次迭代(运行一个循环)时创建一个新的(不同的)runner对象

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


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

我想您正在尝试这样做:

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
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共静态类运行程序{
国际广场;
字符串firstName、lastName、school;
双倍起始时间、等级;
跑步者(整数位,字符串名,字符串名,双年级,字符串学校,双起始时间){
这个地方=地方;
this.firstName=firstName;
this.lastName=lastName;
这个。等级=等级;
这个学校=学校;
this.origTime=origTime;
}
}
公共静态列表读取文件(扫描仪输入){
List runner=new ArrayList();
while(在.hasNext()中){
跑步者。添加(新跑步者)(
in.nextInt(),//place
in.next(),in.next(),//名字,姓氏
in.nextDouble(),//等级
in.next(),//学校
in.nextDouble()//原始时间
));
}
复赛选手;
}
公共静态void main(字符串[]args)引发IOException{
列出跑步者名单;
try(Scanner s=newscanner(new BufferedReader(new FileReader)(“file.txt”))){
runners=读取文件;
}
//对跑步者做些什么
}

请遵循Java命名约定。课程以大写字母开始。对变量和类使用驼峰式大小写。那么,您的代码中目前没有使用的是什么?另外,请更清楚地说明输入文本文件的外观。您的描述不清楚。很抱歉描述不清楚。我已经对原来的帖子进行了修改,以澄清我的问题和文本文件的细节。我已经理解了类和对象的区别。我不清楚的是“显然”我制作了不同的对象,因为它们都有相同的newrunner名称,我会不会因为它们有相同的对象名称而在以后做函数时打电话询问它们,但当我这样做并从arraylist打印出所有对象时,它们被存储在以下代码中(inti=0;I<4;I++){System.out.println(amountFrunners.get(I))
我会得到一个类似这样的输出
newrunner@32414ja  newrunner@ij123451  newrunner@25ia0d12  newrunner@1r31456
感谢我制作了多少runner对象。感谢您迄今为止的帮助。谢谢。我想我已经更正了。我已经更新了我的答案:-)这看起来比以前好多了。唯一的问题是我遇到的问题是,我从一个文本文件中读取所有这些内容,我使用try-catch找到了这个文件,并将该文件命名为“initialresults”。我如何在readfile构造函数中使用它而不是中的扫描仪。或者,您能否澄清我必须做些什么才能将中的扫描仪用作我的构造函数?@CharlesSparkley我添加了一个主类,解释如何对文件使用readfile函数。好的,我使用的不是缓冲阅读器-----------------<代码>public void openfile(){try{initialresults=new Scanner(新文件(“C:\\Donalds\\Java\\racesults.txt”);}catch(异常e){System.out.println(“找不到文件”);}},然后我的while循环遍历我的initialresults。另外,我的main(字符串[]args)只是在一个单独的类中,该类调用了我的所有方法。您能演示一下如何使用我当前使用的方法来完成所有这些吗?谢谢,另外,在使用此代码时会出现很多错误。@CharlesSparkley可能是因为您没有包含依赖项。我已将它们添加到代码中。另外,还有一个括号是需要固定,类和函数需要声明为静态。请立即尝试。