我现在已经坚持了一段时间。我读过一个Point
类型的对象,我想将它分配给Point
数组并打印出来。出于某种原因,我的代码不打印任何东西......如果有人知道造成这种情况的原因。
private Point[] pointArray;
while ((obj = inStream.readObject()) != null)
{
Point pointValue = (Point) obj;
int xValue = pointValue.x;
int yValue = pointValue.y;
pointArray[counter] = new Point(xValue, yValue);
System.out.println(pointArray[counter].toString());
counter++;
}
答案 0 :(得分:1)
数组在Java中具有固定的大小,您需要使用ArrayList,如:
List<Point> points = new ArrayList<Point>();
while ((obj = inStream.readObject()) != null) {
Point pointValue = (Point) obj;
int xValue = pointValue.x;
int yValue = pointValue.y;
points.add(new Point(xValue, yValue));
System.out.println(points.get(points.size()-1).toString());
counter++;
}
答案 1 :(得分:1)
在运行代码之前,您需要更正代码,否则此代码至少无法编译。
private Point[] pointArray; // you have declare the array
但你永远不会初始化它。首先初始化它。
您再次调用toString()
的{{1}}方法。不要这样做,因为它会在Array
中调用Object
类toString()
方法。
编辑:发表评论。
Java
然后使用I dont know the size of the array as it depends on the file.
代替List
Array
不仅有这个优势,而且您可以直接拨打List<Point> pointsList=new ArrayList<>();
,而不是toString()
。由于toString()方法在Arrays
中有override
,因此您需要覆盖AbstractCollection
类中的toString()
方法
答案 2 :(得分:1)
上面代码的问题是数组没有初始化,根据你你没有实际的大小来初始化它所以你可以使用list将列表转换为数组如果你需要
List<Point> points = new ArrayList<Point>();
while ((obj = inStream.readObject()) != null) {
Point pointValue = (Point) obj;
int xValue = pointValue.x;
int yValue = pointValue.y;
pointsList.add(new Point(xValue, yValue));
System.out.println(pointsList.get(pointsList.size()-1).toString());
counter++;
}
Point[] pointsArray = pointsList.toArray(new Point[pointsList.size()]);
答案 3 :(得分:1)
您可以使用ArrayList读取点,然后将其转换为您的数组:
List<Point> points = new ArrayList();
// Read Points and add them to the list
// points.add(new Point(1, 2));
// points.add(new Point(3, 4));
Point[] pointsArray = new Point[points.size()];
points.toArray(pointsArray);