2015-10-12 102 views
0

所以我已經給了一個數組列表的分配,我似乎無法弄清楚如何將文本文件中的每個元素添加到數組列表中的單獨索引(而索引0是整個第一行,索引1是第二個整行等)。Arraylist幫助,如何將單個對象添加到列表中?

所以我的代碼目前已經是

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Objects; 
import java.util.Scanner; 


public class hw2redo 
{ 
    public static void main(String args[]) throws FileNotFoundException 
    { 
     //Scan file for data 
     GeometricObject g = null; 
     BufferedReader file = new BufferedReader(new FileReader("file.txt")); 
      Scanner diskScanner = new Scanner(file); 
      //Create dynamic array list 
      ArrayList<GeometricObject> list = new ArrayList<GeometricObject>(); 
      //Scan data and add data to list 
      while(diskScanner.hasNext()) 
      { 
       String geolist = diskScanner.next(); 
       g = recreateObject(geolist); 

       list.add(g); 

      } 

      showObjects(list); 
      System.out.println(""); 


    } 
    private static GeometricObject recreateObject(String data) 
    { 
     GeometricObject object = new GeometricObject(data); 
     return object; 
    } 
    private static void showObjects(ArrayList<GeometricObject> list) 
    { 
    for(GeometricObject o : list) 
    { 

     System.out.println(o); 
     System.out.println(list.get(0)); 

    } 

    } 


} 
class GeometricObject 
{ 

    private String data; 
    public GeometricObject() 
    { 

    } 

    public GeometricObject(String data) 
    { 
     this.data = data; 
    } 

    @Override 
    public String toString() 
    { 
     return data; 
    } 


} 
class SimpleCircle extends GeometricObject 
{ 
double radius; 

/** Construct a circle with radius 1 */ 
SimpleCircle() 
{ 
    radius = 1; 
} 

/** Construct a circle with a specified radius */ 
SimpleCircle(double newRadius) 
{ 
    radius = newRadius; 
} 

/** Return the area of this circle */ 
double getArea() 
{ 
    return radius * radius * Math.PI; 
} 


/** Return the perimeter of this circle */ 
double getPerimeter() 
{ 
    return 2 * radius * Math.PI; 
} 

/** Set a new radius for this circle */ 
void setRadius(double newRadius) 
{ 
    radius = newRadius; 
} 
} 

和我的file.txt的conatins

Circle,green,false,4.0 
Circle,blue,false,2.0 
Circle,blue,true,7.0 
Rectangle,orange,true,10.0,6.0 
Rectangle,green,false,5.0,11.0 
Rectangle,red,true,14.0,12.0 

所以,當我運行我的代碼是怎麼回事,我的輸出是

Circle,green,false,4.0 
Circle,green,false,4.0 
Circle,blue,false,2.0 
Circle,green,false,4.0 
Circle,blue,true,7.0 
Circle,green,false,4.0 
Rectangle,orange,true,10.0,6.0 
Circle,green,false,4.0 
Rectangle,green,false,5.0,11.0 
Circle,green,false,4.0 
Rectangle,red,true,14.0,12.0 
Circle,green,false,4.0 

這是我所期望的,因爲它將0作爲整個第一行。我的問題是,如果有任何方法可以將每個單獨的元素添加到整個新陣列。例如得到(0)將返回圈子,得到(1)將返回綠等

的分配需要我的輸出看起來像

[email protected] 
GeometricObject [color=red, filled=false, dateOfCreation=Wed Feb 11 12:21:51 EST 
2015] 
Circle [ radius= 4.0 Area=50.27 Perimeter=25.13 ] 

所以我相信我將不得不使用單個元素的方法呢?在我將創建的矩形和圓類中,但我無法弄清楚如何創建具有單獨元素而不是整行的陣列列表。

+0

http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java –

+0

難道你不能通過閱讀直到換行符來分隔行嗎? –

+0

你絕對不希望兩個ArrayLists出現這個問題。這是不必要地使問題複雜化。 –

回答

2

在Java中,字符串類中有一個名爲split的方法。 你可以利用你輸入的字符串分割成字符串元素的數組是這樣的:

String[] elements = geolist.split(","); 

的字符串

Circle,green,false,4.0 

結果數組將是:

{"Circle","green",false","4.0"} 

這使分開處理每個元素變得更容易。