【发布时间】:2026-01-24 23:10:01
【问题描述】:
其中有一些这样的主题,但这个问题略有不同,因此有所不同。
我只关注较大问题的一半。相信很多人都知道魔方问题。
提示:
假设一个文件在每一行都有行和数字,如所示的正方形。编写一个程序,将信息读入 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
每行故意有两个空格。
在我陈述确切的问题之前,这是一个作业模板,因此方法声明和变量初始化是预先确定的。
我不确定该方法是否正确地从文件中创建了一个 2D 数组,因为我还不能运行它。问题是由于某种原因“矩阵”被初始化为 1 列和 2 行。出于什么原因我不确定,但是为了用文件中的数字填充数组,我需要创建一个二维数组,其维度等于一行中的值的数量。
我之前写过代码来创建一个新的二维数组
int[line.length()][line.length()]
但它创建了一个 36x36 数组,因为这是一行中有多少个单独的字符。我有一种感觉,就像循环第一行并让计数器跟踪每个由零分隔的数字序列一样简单。
对我来说,该解决方案似乎太低效且太耗时,无法找到新数组的维度。实现这一目标的最佳方法是什么?不使用 ArrayLists,因为我必须在使用 ArrayLists 后重写这个程序。
【问题讨论】:
-
要获取给定行的数字,您只需调用
line.split(" ");。
标签: java arrays java.util.scanner