【问题标题】:Creating Separate Objects with Loops使用循环创建单独的对象
【发布时间】:2013-12-09 04:14:59
【问题描述】:

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

------1 杰克逊·贝托利 11 贾斯珀 15.29--------------------------------- -------------------------------------------------- ----

如您所见,它包含地点、名字、姓氏、年级、学校名称和时间。 这些信息需要存储在一起,所以我认为最好的方法是将其存储在一个对象“runner”中,然后将所有这些“runner”对象放入一个数组列表中。唯一的问题是我找不到如何为每个单独的跑步者在我的 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++;
    }
}

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

【问题讨论】:

  • 请遵循 Java 命名约定。类以大写字母开头。并对变量 And 类使用驼峰式大小写。
  • 您的代码目前无法使用什么?另外,请更清楚输入文本文件的外观。您的描述非常不清楚。
  • 抱歉描述不清楚。我已对原始帖子进行了更改,以澄清我的问题和文本文件详细信息。

标签: java object text arraylist while-loop


【解决方案1】:

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

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

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

【讨论】:

  • 我已经明白类和对象的区别了。我不清楚的是,“显然”我已经制作了单独的对象,因为它们都具有相同的 newrunner 名称,由于它们具有相同的对象名称,我以后不会因为它们具有相同的对象名称而难以调用它们来执行功能吗?
  • 好吧,但是当我这样做并从数组列表中打印出我所有的对象时,它们使用以下代码存储在其中 for (int i = 0; i < 4; i++){ System.out.println(amountofrunners.get(i)); 我会得到一个看起来像这样的输出 newrunner@32414ja newrunner@ij123451 newrunner@25ia0d12 newrunner@1r31456 但是我制作的许多跑步者物品。感谢您到目前为止的帮助。
  • 谢谢。我想我的立场是正确的。我已经更新了我的答案:-)
【解决方案2】:

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

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
}

【讨论】:

  • 这看起来比我以前的好多了。我遇到的唯一问题是我正在从一个使用 try catch 找到的文本文件中读取所有这些内容,并将该文件命名为我正在使用的“initialresults”。如何在我的 readfile 构造函数中使用它而不是在 Scanner 中使用它。或者你能澄清一下我必须做什么才能使用 Scanner 作为我的构造函数?
  • @CharlesSparkley 我添加了一个主类,它解释了如何将 readfile 函数用于文件。
  • 好吧,我使用的是 ----------------public void openfile() { try{ initialresults = new Scanner (new File ("C:\\Donalds\\Java\\raceresults.txt")); } catch(Exception e){ System.out.println("Could not find file"); } } 而不是缓冲阅读器,然后我的 while 循环遍历我的初始结果。另外,我的 main(String[]args) 只是在一个单独的类中,它调用了我的所有方法。您能否展示如何使用我目前使用的东西来完成所有这些工作?谢谢
  • 另外,使用这段代码时会出现很多错误。
  • @CharlesSparkley 可能是因为您没有包含依赖项。我已将它们添加到代码中。此外,还有一个括号需要修复,类和函数需要声明为静态的。立即尝试。
猜你喜欢
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2015-02-23
  • 2016-11-11
  • 1970-01-01
相关资源
最近更新 更多