我试图打印出从文本文件中读取的点和X网格,但由于某种原因,它只需要一个点并一遍又一遍地重复添加到数组中,而不是读取每个个体字符并将其添加到其各自位置的数组。我该如何解决这个问题?
代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class Project4 {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in); // Created a scanner
System.out.println("Enter the file name you would like to use");
File file = new File(input.nextLine()); // Takes file name to find file
Scanner inputFromFile = new Scanner(file);
FileInputStream fileInput = new FileInputStream(file); // reads file
int r;
while ((r = fileInput.read()) != -1) { // goes through each character in
// file, char by char
char c = (char) r;
for (int i = 0; i < 25; i++) {
for (int y = 0; y < 75 ; y++) { // Adds file values to Array
GameOfLife.grid[i][y] = c;
}
}
}
// Prints the initial environment
System.out.println("Initial set: ");
for (int j = 0; j < GameOfLife.grid.length; j++)
System.out.println(GameOfLife.grid[j]);
}
}
GameOfLife:
import java.util.Arrays;
public class GameOfLife {
static final int m = 25; // number of rows
static final int n = 75; // number of columns
static char[][] grid = new char [m][n]; // Creates an empty (no dots or X's)grid of rows and columns.
}
例如:
答案 0 :(得分:1)
考虑这个块
100
每次读到一个字符时,它都会通过并覆盖该字符的每个单元格,这意味着它只包含最后读取的任何字符。
如果您想在阅读时跟踪坐标,请删除像这样的for循环
while ((r = fileInput.read()) != -1) { // goes through each character in
// file, char by char
char c = (char) r;
for (int i = 0; i < 25; i++) {
for (int y = 0; y < 75 ; y++) { // Adds file values to Array
GameOfLife.grid[i][y] = c;
}
}
}
答案 1 :(得分:0)
中心for
循环是问题所在。如上所述,您可以将读取的每个字符存储在2D数组中的每个位置。您也可以这样实现它:
FileInputStream fileInput = new FileInputStream(file); // reads file
int r; // file, char by char
for (int i = 0; i < 25; i++) {
for (int y = 0; y < 75 ; y++) { // Adds file values to Array
r = fileInput.read()) != -1; // goes through each character in
if( r == -1 ) break;
char c = (char) r;
GameOfLife.grid[i][y] = c;
}
}
哪个更好,我不确定。这种方式保留了嵌套循环与数组的熟悉结构,但如果文件输入结束,它可以提前退出,如果输入实际上意外结束,则可能导致错误。
答案 2 :(得分:0)
您正在使用每个角色填充整个数组,因为您已经嵌套了循环。我认为您应该将grid
初始化为'.'
(因为这似乎是空的)。
不需要成为一个单独的类来包含你的数组,我将它变成一个局部变量,除非你打算将更多的功能移入其中(但是那么一切都不应该是{ {1}})。我建议你使用try-with-resources
来避免泄漏文件句柄。接下来,我使用static
一次读取一行文件(跳过空行和无效字符)。而且,您可以使用Arrays.deepToString(Object[])
打印Scanner
。像
grid