這裏有幾個主題,但是這個問題稍有不同,會使它不同。將.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