2013-12-09 62 views
0

我創建一個比賽結果的程序,我需要存儲所有從文本文件看起來像這樣的信息:創建單獨的對象與循環

------ 1 - 傑克遜BERTOLI 11碧玉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++; 
    } 
} 

所以你可以看到我在看每一個元素從文本文件,然後試圖使一個新的「亞軍」的對象,存儲從文本文件中的元素該對象,但後來我堅持把下一行的元素放在同一個對象名稱中。我怎樣才能每次創建一個新的對象名稱來存儲這些元素?我使用對象的唯一原因是因爲它似乎是爲賽跑者組織數據的最佳方式。但是,如果我使用了一個數組或列表,是不是會混亂,難以分類?提前謝謝你的幫助。

+1

請遵循Java的命名約定。課程以大寫字母開頭。並使用駱駝套管進行變量和類。 –

+0

什麼是目前不使用您的代碼?另外,請更清楚輸入文本文件的樣子。你的描述很不明確。 –

+0

對不清楚的描述。我對原文發表了更改,以澄清我的問題和文本文件的詳細信息。 –

回答

1

當循環運行時,即使runner類多次使用,每次循環迭代(遍歷一個循環),它都會創建一個新的(不同的)runner對象。

在行amountofrunners.add(newrunner);中,Java基本上覆制了存儲在newrunner中的值並單獨存儲它/它們。在這種情況下,每個對象都是不同的,即使它在創建時具有相同的變量名稱。

使用ArrayList實際上可以更容易地進行排序,因爲您可以使用索引,foreach循環和其他功能來幫助管理存儲在ArrayList中的對象。

+0

我已經理解了類和對象的區別。我不清楚的是,「顯然」我做了單獨的對象,因爲它們都具有相同的newrunner名稱,因爲它們具有相同的對象名稱,所以稍後我會不會因爲要做功能而調用它們? –

+0

感謝您的反饋。我已經更新了我的答案。 –

+0

好吧,但是當我這樣做並從列表中打印出我的所有對象時,它們被存儲在下面的代碼中:for(int i = 0; i <4; i ++)System.out.println(amountofrunners.get (i));''我會得到一個看起來像這樣的輸出'newrunner @ 32414ja newrunner @ ij123451 newrunner @ 25ia0d12 newrunner @ 1r31456'對於我製作的任何跑步者對象。感謝您的幫助。 –

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 
} 
+0

這看起來比我以前好多了。我遇到的唯一問題是,我從一個文本文件中讀取所有這些信息,我發現使用try catch,並將該文件命名爲「initialresults」。我怎樣才能在我的讀取文件構造函數而不是掃描器中使用它。或者,您能否澄清我爲了能夠將掃描器用作構造函數而必須做的事情? –

+0

@CharlesSparkley我添加了一個主類,解釋瞭如何爲文件使用readfile函數。 – bcorso

+0

好的,而不是我正在使用的緩衝式讀取器----------------'public void openfile(){ 嘗試initialresults = new Scanner(new File(「C: \\ \\多納爾茲的Java \\ raceresults.txt「)); } catch(Exception e){ System.out.println(「Could not find file」); } }'然後我的while循環遍歷我的初始結果。另外,我的main(String [] args)只是在一個獨立的類中調用我所有的方法。你能告訴我所有這些將如何完成我目前使用的?謝謝 –