2016-04-27 4 views
0

Also habe ich dieses Programm geschrieben, das eine Textdatei empfängt, die Daten in dieser Datei nimmt und in ein 2D-Char-Array legt, um auf verschiedene Arten auf den Bildschirm zu drucken. Eine der Dateien, die ich habe, funktioniert perfekt, jedoch gibt es ein Problem beim Versuch, die zweite Datei "diagonal" auszudrucken. Als erstes ist hier die erste und einfachere Datei, die ganz gut funktioniert:Array-Index Out of Bounds erhalten Ausnahme für eine Textdatei, aber nicht für eine andere ähnliche Datei in Java?

5 4 
FILE 
WITH 
SOME 
MORE 
INFO 

In beiden Dateien zeigen die ersten beiden Zahlen die Anzahl der Zeilen und Spalten, die für den 2D-char-Array erstellt werden, respectively. Als nächstes ist hier ein Teil des Codes mit dieser Datei „testfile.txt“ und die Ergebnisse des Code:

public static void main(String[] args) throws IOException 
{ 
    char[][] charArray = readFile(); 

    printArray(charArray); 
    printVerticalArray(charArray); 
    printHorizontalArray(charArray); 
    printDiagonalArray(charArray); 
} 

public static char[][] readFile() throws IOException 
{ 
    File myFile = new File("monalisa.txt"); 
    Scanner inputFile = new Scanner(myFile); 

    int rows, columns; 
    rows = inputFile.nextInt(); 
    columns = inputFile.nextInt(); 

    String[] strArray = inputFile.nextLine().split(" "); 

    char[][] array = new char[rows][columns]; 

    for(int i = 0; i < rows; i++) 
    { 
     array[i] = inputFile.nextLine().toCharArray(); 
    } 
    return array; 
} 
. 
. 
. 
public static void printDiagonalArray(char[][] cArray) 
{ 
    for(int i = 0; i < 1; i++) 
    { 
     for(int c = cArray[i].length - 1; c >= 0; c--) 
     { 
      for(int r = cArray[c].length; r >= 0; r--) 
      { 
       System.out.print(cArray[r][c]); 
      } 
      System.out.println(); 
     } 
     System.out.println(); 
    } 
} 

Ergebnisse:

Original Text: 

FILE 
WITH 
SOME 
MORE 
INFO 

Transformations: 

INFO 
MORE 
SOME 
WITH 
FILE 


ELIF 
HTIW 
EMOS 
EROM 
OFNI 


OEEHE 
FRMTL 
NOOII 
IMSWF 

das so ist genau wie das Programm soll Wenn ich jedoch versuche, die zweite Datei "monalisa.txt" in das Programm zu schreiben, bekomme ich die Ausnahme außerhalb des Bereichs, und ich kann nicht herausfinden, warum. Hier ist die ursprüngliche zweite Textdatei (es ist ein Google Drive Link, weil es zu groß wäre hier angezeigt): https://drive.google.com/open?id=0BwujWiqVRKKsajlKV1NIWG1uQVU

Und hier ist das Ergebnis der Programme mit dieser Textdatei: https://drive.google.com/open?id=0BwujWiqVRKKsUnZYQTU4YmZDWUE

Linie 78 in dem code ist:

for(int r = cArray[c].length; r >= 0; r--) 

Also würde jemand zufällig wissen, warum das passiert? Und danke an alle, die das alles durchgelesen haben!

+0

Es sieht aus wie Sie Ihre Array-Indizes falsch herum haben: 'System.out.print (cArray [r] [c]);' sollte 'System.out.print (cArray [c] [r]); '. –

+0

@AndyTurner Ich habe das versucht, aber die genau gleiche Ausnahme tritt auf:/ – thelonewanderer

+0

Auch 'r = cArray [c] .length - 1'. –

Antwort

1

In Zeile

for(int r = cArray[c].length; r >= 0; r--) 

Sie setzen nicht Anfangswert für r richtig. Sie sollten die Anzahl der Zeilen in der aktuellen Spalte nicht überprüfen, aber die Anzahl der Zeilen im Allgemeinen wird für jede Spalte gleich sein. Ändern Sie diese Zeile zu

for(int r = cArray.length-1; r >= 0; r--) 
+0

Das hat funktioniert! Vielen Dank! – thelonewanderer

Verwandte Themen