这里有几个主题,但是这个问题稍有不同,会使它不同。将.txt文件读入2D阵列
我只专注于较大问题的一半。我相信你们中许多人都知道这个魔方问题。
提示:
假设对等所示的方形各行线和数字文件。编写一个读取信息到intS的二维数组的程序。程序应该确定矩阵是否是魔术方块。
工作液:
public static int[][] create2DIntMatrixFromFile(String filename) throws Exception {
int[][] matrix = {{1}, {2}};
File inFile = new File(filename);
Scanner in = new Scanner(inFile);
int intLength = 0;
String[] length = in.nextLine().trim().split("\\s+");
for (int i = 0; i < length.length; i++) {
intLength++;
}
in.close();
matrix = new int[intLength][intLength];
in = new Scanner(inFile);
int lineCount = 0;
while (in.hasNextLine()) {
String[] currentLine = in.nextLine().trim().split("\\s+");
for (int i = 0; i < currentLine.length; i++) {
matrix[lineCount][i] = Integer.parseInt(currentLine[i]);
}
lineCount++;
}
return matrix;
}
public static boolean isMagicSquare(int[][] square) {
return false;
}
下面是用于读取文本文件信息到一个二维数组我的(旧)代码:
public static int[][] create2DIntMatrixFromFile(String filename) throws Exception {
int[][] matrix = {{1}, {2}};
File inFile = new File(filename);
Scanner in = new Scanner(inFile);
in.useDelimiter("[/n]");
String line = "";
int lineCount = 0;
while (in.hasNextLine()) {
line = in.nextLine().trim();
Scanner lineIn = new Scanner(line);
lineIn.useDelimiter("");
for (int i = 0; lineIn.hasNext(); i++) {
matrix[lineCount][i] = Integer.parseInt(lineIn.next());
lineIn.next();
}
lineCount++;
}
return matrix;
}
public static boolean isMagicSquare(int[][] square) {
return false;
}
这里是文本文件,我阅读。它的形状是一个9x9的二维数组,但程序必须容纳一个模糊大小的数组。
37 48 59 70 81 2 13 24 35
36 38 49 60 71 73 3 14 25
26 28 39 50 61 72 74 4 15
16 27 29 40 51 62 64 75 5
6 17 19 30 41 52 63 65 76
77 7 18 20 31 42 53 55 66
67 78 8 10 21 32 43 54 56
57 68 79 9 11 22 33 44 46
47 58 69 80 1 12 23 34 45
每一行都有两个空格。
在我说明确切的问题之前,这是一个家庭作业模板,因此方法声明和变量初始化是预先确定的。
我不确定该方法甚至能够正确地从文件创建二维数组,因为我还不能运行它。问题是由于某种原因,“矩阵”被初始化为1列和2行。出于什么原因我不确定,但为了用文件中的数字填充数组,我需要创建一个二维数组,其维数等于一行中值的数量。
我以前写的代码来创建一个新的二维数组
int[line.length()][line.length()]
,但它创造了一个36X36阵列,因为这是许多单个字符如何在一行。我有一种感觉,就像循环第一行一样简单,并有一个计数器记录每个由零分隔的数字序列。
对我来说,该解决方案似乎太低效,耗时只是为了找到新阵列的尺寸。什么是实现这一目标的最佳方式?不使用ArrayLists,因为我必须在使用ArrayLists后重写此程序。
要获得给定行上的数字,您可以简单地调用'line.split(“”);'。 – ggmathur