从文本文件中读取数据并将其保存到2D数组中

时间:2012-10-30 15:45:23

标签: java jsp

我是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 ......

我试着玩过去几个小时的代码,我无法弄明白......我的整个代码是错的还是什么?

感谢您的帮助!

4 个答案:

答案 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