我是Java编程新手...... 我试图从文本文件中读取数据并将其保存到2D数组中。所以基本上,程序将接收参数(IP)并查找具有相同IP号的文件。 程序将读取每一行并存储到二维数组中。
我的尝试:
String ipNum = request.getParameter("ipNum");
String root = getServletContext().getRealPath("/");
String dailyPath = root + "\\" + ipNum +".txt";
int[][] myarray = new int[3][6];
BufferedReader br = new BufferedReader(new FileReader(dailyPath));
String line = " ";
String [] temp;
while ((line = br.readLine())!= null){
temp = line.split(" ");
for(int i = 0; i<myarray.length; i++) {
for (int j = 0; j<myarray.length; j++) {
myarray[i][j] = Integer.parseInt(temp[i]);
}
}
}
数据:
CPU 30 30 30 30 30 30
RAM 70 70 70 70 70 70
HAR 80 80 80 80 80 80
NET 100 100 100 100 100 100
我遇到的问题是,当我调用数组时,我总是得到100或0(假设为空)
所以例如myarray [1] [2]应输出30但我得到100 myarray [2] [4] = 70但我得到100 ......
我试着玩过去几个小时的代码,我无法弄明白......我的整个代码是错的还是什么?
感谢您的帮助!
答案 0 :(得分:2)
是的,你正在迭代两次,因此用最后一个值填充你的数组...试试这段代码:
int i = 0;
while ((line = br.readLine())!= null){
temp = line.split(" ");
for (int j = 0; j<myarray[i].length; j++) {
myarray[i][j] = Integer.parseInt(temp[j]);
}
i++;
}
希望这会有所帮助......
答案 1 :(得分:2)
除了乔希斯的评论,你还设置了错误的终止条件。
for(int i = 0; i< myarray.length; i++) {
for (int j = 0; j< myarray[i].length; j++) {
myarray[i][j] = Integer.parseInt(temp[i]);
}
}
这样您可以遍历数组但不能使用它来解决您的问题。相反,你需要使用1个while循环和1个for循环。
答案 2 :(得分:1)
你的'while'循环和你的第一个'for'循环正在执行类似的任务 - 对于你读过的每一行,你迭代你的数组中的每一行,并用你正在阅读的行填充它的列。每个值都是100,因为您读取的最后一行是100个。
我建议删除第一个'for'循环,声明'int i = 0;'在'while'循环之前,'i ++'在底部(但在内部)for循环。
@Vivek指出你需要为你的j计数器测量'myArray [i] .length'。
答案 3 :(得分:1)
在我看来,您正在阅读每行文本,然后将该行解析为2D数组。这并不完全正确,因为每一行都可以被认为是一行。也许你可以为你在while ((line = br.readLine())!= null)
循环中读取的每一行使用一个计数器,然后只在计数器索引处读入你的二维数组的行...就像这样:
int rowCounter = 0;
while ((line = br.readLine())!= null) {
for(int i = 0; i<myarray.length; i++)
myarray[rowCounter][i] = Integer.parseInt(temp[i]);
rowCounter++;
}
作为旁注,如果你确实想要索引到一个多维数组,你也有一个副作用。在两个循环中,您都在迭代,直到达到最大行数。对于遍历列的j循环,这可能会导致问题。相反,当使用2D循环时,请尝试:
for(int i = 0; i < array.Length; i++)
for(int j = 0; j < array[0].Length; j++)
//Do some stuff