0

我是 Java 编程新手...我正在尝试从文本文件中读取数据并将其保存到二维数组中。所以基本上,程序将接收参数(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...

在过去的几个小时里,我试图玩弄代码,但我无法弄清楚......我的整个代码是错误的还是什么?

感谢帮助!

4

4 回答 4

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++;
}

希望这可以帮助...

于 2012-10-30T15:57:31.170 回答
2

除了 Joshs 的话,您还错误地设置了终止条件。

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 循环。

于 2012-10-30T16:01:29.020 回答
1

您的“while”循环和您的第一个“for”循环正在执行类似的任务——对于您读取的每一行,您都在遍历数组中的每一行并用正在读取的行填充它的列。每个值都是 100,因为您读取的最后一行是 100。

我建议删除第一个'for'循环,声明'int i = 0;' 在'while'循环之前,以及在底部(但在内部)的'i++' for 循环。

@Vivek 提出了一个很好的观点,即您需要为您的 j 计数器测量 'myArray[ i ].length' 。

于 2012-10-30T15:50:55.330 回答
1

在我看来,您正在阅读每一行文本,然后将该行解析为二维数组。这并不完全正确,因为每一行都可以视为一行。也许你可以为你在循环中读取的每一行使用一个计数器,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
于 2012-10-30T15:56:55.293 回答