在对静态2D阵列执行任何操作之前更新该阵列的大小



我有一个从文件中读取并输出到文件的程序。当它从文件中读取数据时,它会将其存储到2D阵列中,在计算机运行接下来的几个代码后,它会输出到文件中。

现在,初始文件的固定长度为24,并且数组在主之外声明

static String [][] table = new String [24][7];

由于最终我们将输出到文件,因此文件的长度从24增加到25。由于在代码运行时我无法真正更改数组的大小,因此我首先使用

int lines = 0;
while (reader.readLine() != null) lines++;
reader.close();

以获取行的长度,然后通过重新创建数组来更新数组的大小。

table = new String [lines][7];

如果我错了,请纠正我,但这样做不应该像我刚刚声明的那样更新数组的大小吗?

每次我打印到文件时,长度都会增加,我想使用我输出到文件的信息来预处理计算以及文件中的初始数据。if you want to see what happens after herehttps://codeshare.io/0grq7g

将新的String数组分配给table变量时,可以创建一个指向数组的指针。您可以使用循环和System.arraycopy(...):来展开表格

String[][] resizeArray(String[][] src, int newSizeX, int newSizeY) {
String[][] result = new String[newSizeX][newSizeY];
int maxX=newSizeX<src.length?newSizeX:src.length;
for(int x=0; x<maxX; x++) {
System.arraycopy(src[x],0,result[x],0,newSizeY<src[x].length?newSizeY:src[x].length);
}
return result;
}

用法:

table = resizeArray(table,lines,7);

编辑:我想我误解了OP的问题。数组的大小会增加,因为您为每个添加的玩家添加两个n,因此行数不再等于玩家数。您可以省略第一个n,也可以将生成的lines变量(在reader.close()之后(除以2。
对于第一种方法,您可以将代码更改为:

for (i = 0; i < add; i++)
{
System.out.println("Enter in the Folowung order: Player GP  G   A   P   +/- PIM PPG PPP SHG SHP GWG OTG S   S%  FO%");
//writer.write("n");
for (j = 0; j < 15; j++)
{

String word = scan.next();
writer.write(word + "t");
}
writer.write("n");

}

最新更新