Es gibt ein paar dieser Themen da draußen, aber dieses Problem hat eine kleine Wendung, die es anders macht..txt-Datei in 2D-Array lesen
Ich bin auf nur die Hälfte eines größeren Problems konzentriert. Ich bin mir sicher, dass viele von Ihnen das magische Quadratproblem kennen.
Prompt:
Es sei angenommen, eine Datei mit Linien und Zahlen in jeder Zeile wie das Quadrat dargestellt. Schreiben Sie ein Programm, das Informationen in ein zweidimensionales Array von IntS liest. Das Programm sollte bestimmen, ob die Matrix ein magisches Quadrat ist oder nicht.
Arbeitslösung:
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;
}
Hier ist mein (alter) Code für in einen 2D-Array aus einer Textdatei Informationen zu lesen:
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;
}
Und hier ist die Textdatei Ich bin Lesen von. Es hat die Form eines 9x9-2D-Arrays, aber das Programm muss ein Array mehrdeutiger Größe aufnehmen.
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
Es gibt zwei Leerzeichen, die absichtlich jede Zeile durchlaufen.
Bevor ich das genaue Problem angeben, ist dies eine Hausaufgabenvorlage, so dass die Methodendeklaration und Variableninitialisierung vorher festgelegt wurde.
Ich bin nicht sicher, dass die Methode sogar ein 2D-Array korrekt aus der Datei erstellt, weil ich es noch nicht ausführen kann. Das Problem ist, dass "Matrix" aus irgendeinem Grund mit 1 Spalte und 2 Zeilen initialisiert wurde. Aus welchem Grund bin ich nicht sicher, aber um ein Array mit den Zahlen aus der Datei zu füllen, muss ich ein 2D-Array mit Dimensionen erstellen, die der Anzahl der Werte in einer Zeile entsprechen.
Ich hatte vorher Code geschrieben, um einen neuen 2D-Array erstellen
int[line.length()][line.length()]
aber es hat eine 36x36-Array erstellt, weil das ist, wie viele einzelnen Zeichen in einer Zeile sind. Ich habe das Gefühl, dass es so einfach ist, die erste Zeile zu durchlaufen und einen Zähler zu haben, der jede durch eine Null getrennte Zahlenfolge verfolgt.
Für mich scheint diese Lösung zu ineffizient und zeitaufwendig, nur um die Dimensionen des neuen Arrays zu finden. Was ist der beste Weg, dies zu erreichen? Ohne ArrayLists zu verwenden, da ich dieses Programm nach der Verwendung von ArrayLists neu schreiben muss.
Um die Zahlen in einer bestimmten Zeile zu erhalten, können Sie einfach 'line.split (" ");'. – ggmathur