【问题标题】:reading a file and turning it into a 2-d array in java读取文件并将其转换为java中的二维数组
【发布时间】:2017-10-28 22:05:05
【问题描述】:

我需要使用文本文件制作一个 20x45 的数组。例如使用 3*5 数组:

来自文件的文本输入:
四分和七年前

数组(用_表示空格):
F o u r _
s c o r e
_ 和 _

我会坦率地说我对 Java 几乎是全新的,我已经尝试了一段时间,但不知道从哪里开始。到目前为止我已经得到了这个代码:

    // Create file instance.
    java.io.File file = new java.io.File("array.txt"); 

    int totalRow = 20;
    int totalColumn = 45;
    char[][] myArray = new char[totalRow][totalColumn];
    Scanner scanner = new Scanner(file);

    for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {    
        char[] chars = scanner.nextLine().toCharArray();
        for (int i = 0; i < totalColumn && i < chars.length; i++) {
            myArray[row][i] = chars[i];
            System.out.println(myArray[row][i]);
        }
        //System.out.println("");
    }

我尝试了许多不同的迭代,但我被卡住了。
提前致谢。

【问题讨论】:

  • How to debug small programs。如果您检查或打印出变量,应该很容易找出哪里出错以及如何修复它。至少假设您的文件都在一行中,如您的示例所示 - 如果不是,修复它的最简单方法是使用 nextLine 以外的其他内容读取文件。
  • 文件和例子一样都在一行上。到目前为止,我可以让它打印出列而不是行。我不确定我做错了什么。不知道是不是我打印错了?我已将 System.out.println 更改为 System.out.print。

标签: java arrays multidimensional-array


【解决方案1】:

问题在于第一次运行scanner.nextLine().toCharArray(); 时,它会读取整个文本,因为文件只包含一行。但是,在该循环中,您的代码仅处理 2d 数组的第一行。

for (int row = 0; scanner.hasNextLine() && row < totalRow; row++) {    
    char[] chars = scanner.nextLine().toCharArray(); //Notice this reads the entire text the first loop when row=0
    for (int i = 0; i < totalColumn && i < chars.length; i++) {
        //This loop fills the first row of the array when row=0
        myArray[row][i] = chars[i];
        System.out.println(myArray[row][i]);
    }
    //End of loop, the next time scanner.hasNextLine() returns false and loop terminates
}

要解决这个问题,你应该在循环之外阅读chars(只阅读一次)。然后在遍历二维数组时使用单个索引遍历字符。

char[] chars = scanner.nextLine().toCharArray();
int i = 0;

for (int row = 0; row < totalRow & i<chars.length; row++) {    
   for (int col = 0; col < totalColumn & i<char.length; col++) {
       myArray[row][col] = chars[i];
       i++;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2021-10-25
    • 2012-08-21
    相关资源
    最近更新 更多