【发布时间】:2015-10-12 19:34:28
【问题描述】:
所以我被分配了一个数组列表,但我似乎不太明白如何将文本文件中的每个元素添加到数组列表中的单独索引(而不是索引 0 是整个第一行,索引 1 是第二个整行等)。
所以我目前拥有的代码是
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 文件
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 作为整个第一行。我的问题是是否有任何方法可以将每个单独的元素添加到整个新数组中。例如 get(0) 将返回圆形,get(1) 将返回绿色等。
作业要求我的输出看起来像
csu.Lin.Circle@55f96302
GeometricObject [color=red, filled=false, dateOfCreation=Wed Feb 11 12:21:51 EST
2015]
Circle [ radius= 4.0 Area=50.27 Perimeter=25.13 ]
所以我相信我将不得不使用单个元素的方法?在我将创建的矩形和圆形类中,但我无法弄清楚如何使用单个元素而不是整行创建数组列表。
【问题讨论】:
-
你不能通过阅读直到换行符来分隔行吗?
-
你绝对不想要两个 ArrayLists 来解决这个问题。这使问题不必要地复杂化了。
-
您不应该创建包含单个元素的数组列表。您应该创建一个形状的数组列表,因此您必须获取每行中的信息并在创建形状类的实例时使用它。所以(a)研究形状类,(b)研究如何分割或扫描单条线,以及如何将看起来像数字的元素转换为实际数字。