我有一个包含以下数据的文本文件:
HW1 HW2 HW3 HW4 HW5
97 64 75 100 21 John
19 68 89 49 97 Kim
28 83 48 44 91 Kathy
69 66 78 87 85 Steve
99 94 93 96 91 Stacy
35 75 65 55 45 Faith
我尝试用BufferedReader
读取大小,以便我可以将它们转换为多个数组(例如HW1arr
,HW2arr
等...)。如何找到像这个2D文件一样的数组大小?
public static void main(String[] args) {
Scanner reader = null;
try {
File f = new File("inputHW7.txt");
reader = new Scanner(f);
} catch(FileNotFoundException e) {
}
double[][] size2d = null;
int count = 0;
int rowCount =0;
int colCount = 0;
int readChar = 0;
boolean empty = true;
rowCount = reader.nextInt();
for(int i=0 ; i<rowCount ; i++){
colCount = reader.nextInt();
size2d[i] = new double[colCount];
System.out.print("debugs column = "+size2d[i]);
for(int j=0 ; j<colCount ; j++){
size2d[i][j] = reader.nextDouble();
System.out.println("debug rows = "+ size2d[i][j]);
}
}
}
答案 0 :(得分:0)
使用ArrayList
,以便您不需要事先知道尺寸。
如果列数固定,您可以读取整行,并按空格分割。结果数组的长度将是您的列大小。但是不能预先获得行大小。因此,首选列表集合。
https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Scanner.html
答案 1 :(得分:0)
这是一个概念。我不会为你做功课。
List<String> list = new ArrayList<>();
。您需要使用List.add()方法将每个必需的文件数据行添加到列表中。list.size()
)现在告诉你多长时间(
长度)您要创建的每个数组都是。宣布你的每一个
列数组(即: hw1Array [] 到 hw5Array [] )为 double 数据
类型。看看你的代码,无论如何这都是你的意图。确定
立即初始化每个数组的长度:double[] hw1Array = new double[list.size()];
。for (int i = 0; i < list.size(); i++) { }
。String[] lineValues = list.get(i).split("\\s+");
。 "\\s+"
是 split()方法中的Regular Expression,这意味着将字符串拆分为包含任意数量空格的分隔符。现在只需填充5个柱状阵列即可。再次
在 for 循环中,使用来自的数据填充每个柱状数组
lineValues [] String在前一代码行中创建的数组,并使用Double.parseDouble()方法在流程中转换为double数据类型,例如:
if (lineValue.length >= 1) { hw1Array[i] = Double.parseDouble(lineValue[0]); }
if (lineValue.length >= 2) { hw2Array[i] = Double.parseDouble(lineValue[1]); }
if (lineValue.length >= 3) { hw3Array[i] = Double.parseDouble(lineValue[2]); }
if (lineValue.length >= 4) { hw4Array[i] = Double.parseDouble(lineValue[3]); }
if (lineValue.length >= 5) { hw5Array[i] = Double.parseDouble(lineValue[4]); }
我们使用 if 条件来确保实际上要解析的数据加倍,否则我们最终会得到 NumberFormatException 。
现在已创建数组。
快速显示阵列:
System.out.println(Arrays.toString(hw1Array));
System.out.println(Arrays.toString(hw2Array));
System.out.println(Arrays.toString(hw3Array));
System.out.println(Arrays.toString(hw4Array));
System.out.println(Arrays.toString(hw5Array));