0

下午好,

我目前正在阅读格式为

5 5
0     0     0     0     0
0     0     0     0     0
0     0     0     0     0
0     0     0     0     0
0     0     0     0     0

成二维数组。

第一行是二维数组的行长和列长(即 5x5)。

前面的行给出了输入值(值本身并不重要,只是它们是整数)需要读入二维数组,使得 array[0][0] = 0,array[0][1] = 0 等.

我目前最讨厌的是在第一行之后读取文件的内容并显示它到目前为止我所拥有的是,

public static void importFile(String fileName) throws IOException 
{
    int rows = 0;
    int cols = 0;

    int[][] numArray = null;

    try {
        int count = 0;

        BufferedReader reader = new BufferedReader(new FileReader(fileName));

        String line;
        while ((line = reader.readLine()) != null) 
        {
           count++;

            if (count == 1) 
            {
                String[] tokenizer = line.split("\\s+");

                rows = Integer.parseInt(tokenizer[0]);
                System.out.println(rows);

                cols = Integer.parseInt(tokenizer[1]);
                System.out.println(cols);

                numArray = new int[rows][cols];

            } // end of if statement
            else if(count > 1)
            {
                String[] tokenizer = line.split("   ");

                    for(int j = 0; j < tokenizer.length; j++)
                    {
                        numArray[rows][j] = Integer.parseInt(tokenizer[j]);
                        System.out.print(numArray[rows][j] + " ");
                    }
                    System.out.println("");

                rows++;

            } // end of else if

        }// end of while loop

    } //end of try statement
    catch (Exception ex) {
        System.out.println("The code throws an exception");
        System.out.println(ex.getMessage());
    } 

    System.out.println("I am printing the matrix: ");
    for (int i = 0; i < rows; i++) {
        for(int j=0; j < cols; j++)
            System.out.print(numArray[i][j] + " ");
        System.out.println("");
    }  
} // end of import file

} // 类结束输出如给定

Please enter the file you'd like to use: 
data4.txt
5
5
The code throws an exception
5
I am printing the matrix: 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
0 0 0 0 0 
4

3 回答 3

1

我认为你把事情复杂化了。如果可以假定文件格式始终正确,则可以安全地使用

String[] tokenizer = line.split(" "); // you have this line of code already.
rows = Integer.parseInt(tokenizer[0]);
cols = Integer.parseInt(tokenizer[1]);

这将解决您阅读第一行的问题。

你的问题是这行代码:

rows = tempLine;

您将值设置为tempLine( int tempLine = line.charAt(i);) 的方式,您将获得inta 的值char。的intchar '5'不是 5,而是 53,因为那是字符 的 ASCII 码'5'

于 2013-01-23T19:32:21.240 回答
0

我们在我的另一个答案下进行了扩展讨论。由于您的代码显示您尝试过(并且非常接近),因此我将为您的问题发布一个强大的解决方案。我完全重写了它,因为你的程序有很多小错误,而且要详细说明每个程序会需要更多的工作。以下方法将读取您指定格式的文件并返回结果int[][]。如果您的文件中有错误,该方法会告诉您;)

public static int[][] importFile(String fileName) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(fileName));
    int[][] numArray;
    String line = reader.readLine();
    if (line == null) {
        throw new IllegalArgumentException("There was no 1st line.");
    }
    String[] dimensions = line.split("\\s+");
    try {
        int rows = Integer.parseInt(dimensions[0]);
        int cols = Integer.parseInt(dimensions[1]);
        // TODO: check for negative values.
        numArray = new int[rows][cols];
    } catch (NumberFormatException e) {
        throw new IllegalArgumentException("First line of file has to be 'rows cols'");
    }

    int row = 0; 

    while ((line = reader.readLine()) != null && row < numArray.length) {
        String[] tokens = line.split("\\s+");
        if (tokens.length > numArray[row].length) {
            throw new IllegalArgumentException("Too many values provided in matrix row " + row);
        }
        // to less values will be filled with 0. If you don't want that
        // you have to uncomment the next 3 lines.
        //if (tokens.length < numArray[row].length) {
        //  throw new IllegalArgumentException("Not enough values provided in matrix row " + row);
        //}
        for(int column = 0; column < tokens.length; column++) {
            try {
                int value = Integer.parseInt(tokens[column]);
                numArray[row][column] = value; 
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException("Non numeric value found in matrix row " + row + ", column " + column);
            }
        }
        row++;
    }
    if (line != null) {
        // there were too many rows provided.
        // Superflous ones are ignored.
        // You can also throw exception, if you want.
    }
    if (row < numArray.length) {
        // There were too less rows in the file. If that's OK, the
        // missing rows will be interpreted as all 0.
        // If that's OK with you, you can comment out this whole
        // if block
        throw new IllegalArgumentException("Expected " + numArray.length + " rows, there only were " + row);
    }
    try {
        reader.close(); // never forget to close a stream.
    } catch (IOException e) { }
    return numArray;
}
于 2013-01-23T22:41:35.027 回答
0

对于第一行:

if (count == 1) {
                String[] tokenizer = line.split(" ");
                row=Integer.parseInt(tokenizer[0]);
                col=Integer.parseInt(tokenizer[1]);
                System.out.println("There are " + cols + " colums");
                numArray = new int[row][col];
            } // end of if statement 

用于填充数组

            String[] tokenizer = line.split(" ");
            for(int j=0;j<col;j++){
            numArray[0][j]=Integer.parseInt(tokenizer[j]);      //fill the array from tokenizer
            }
于 2013-01-23T19:44:03.880 回答