2016-07-18 3 views
-1

Ich bin ein java.lang.ArrayStoreException Fehler mit dem folgenden Verfahren erhalten:Arrays Wenn Sie aus der Liste von 1D-Arrays zu 2D-Array konvertieren

public static int[][] getData(String path) throws IOException 
    { 
     // Read all 
     CSVReader csvReader = new CSVReader(new FileReader(new File(path))); 
     List<String []> list = csvReader.readAll(); 
     csvReader.close(); 

     // Convert to 2D array 
     int[][] dataArr=list.toArray(new int[list.size()][]); 

     for(int i = 0; i<3; i++) 
     { 
      for(int x = 0; x<3; x++) 
      { 


System.out.print(dataArr[i][x]); 
     } 
     System.out.println(); 
    } 
    return dataArr; 
} 

Es verweist auf die Zeile unter ‚// zu 2D-Array konvertieren‘ Als das Problem habe ich eine Vielzahl von Möglichkeiten ausprobiert, die ich in anderen Fragen gesehen habe, um diese Arbeit zu machen, aber ohne Erfolg! Der Code verweist auf eine CSV-Datei in Pfad und füllt dann ein 2D-Array mit den Werten. Wenn es einen einfacheren Weg als die Verwendung von CSVReader gibt, von dem jeder weiß, würde ich es gerne sehen! Ich habe diesen Code hier gefunden und ich habe mehrere andere Beiträge darüber gesehen, aber das scheint der einfachste zu sein und ich denke nicht, dass es zu dem Problem führt.

Vielen Dank im Voraus.

// Convert to 2D array 
String[][] dataArr=list.toArray(new String[0][0]); 
+0

Ein einfacher Tippfehler. –

+0

@JonnyHenly Da es so einfach ist, warum gibst du keine konstruktive Antwort? – avojak

+0

@avojak Wie wird OP von mir profitieren und wiederholen, was 3 Antworten schon sagen? Ganz zu schweigen von [mehrere verwandte Fragen] (https://www.google.com/search?q=StackOverflow+ArrayStoreException&ie=utf-8&oe=utf-8) haben bereits Antworten, die zusammenfassen, was unten gesagt wurde. Ich meinte nicht * einfach * negativ, ich habe gerade einen Kommentar hinzugefügt, mit dem ich die Closeflag anhoben wollte. –

Antwort

0

Mit der Zeile:

int[][] dataArr=list.toArray(new int[list.size()][]); 

Sie versuchen, eine String[] in einem int[][] zu speichern, was nicht erlaubt ist. Und da Arrays zur Laufzeit den Typ ihrer Komponenten überprüfen, erhalten Sie eine Ausnahme.


Wenn Sie ein List<String[]> konvertieren möchten int[][] du gehst, es manuell zu tun haben:

int[][] dataArr = new int[list.size()][]; 

for(int i = 0; i < list.size(); i++) { 
    dataArr[i] = new int[list.get(i).length]; 
    for(int j = 0; j < dataArr[i].length; j++) { 
     dataArr[i][j] = Integer.parseInt(list.get(i)[j]); 
    } 
} 
+0

Ich bekomme jetzt einen neuen Fehler, Number Format Exception, im 'dataArr [i] [j] = Integer.parseInt (list.get (i) [j]);' Linie. –

+0

@WilliamJestes Das bedeutet, dass Ihr Eingabe-String kein gültiges '' 'Integer''' ist. z.B. Wenn der String '' '" keine Zahl "' '' statt etwas wie '' '" 15 "' 'ist, tritt diese Ausnahme auf. –

+0

Vielen Dank für Ihre erste Antwort, ich erkannte, dass die Eingabedatei Strings enthielt und ich hätte nicht versucht, ein Integer-Double-Array zu erstellen. –

0

Sie sollten Ihre Liste der Strings an einen String [] [] konvertieren

Wirft: Arrays - wenn die Der Laufzeittyp des angegebenen Arrays ist kein Supertyp des Laufzeittyps jedes Elements in dieser Liste

In Ihrem Fall ist das angegebene Array vom Typ int[], und das ist kein Supertype des Typs jedes Elements in der Liste, die String[] ist.

Das Update kann davon abhängen, welche Art von Array Sie benötigen. Wenn Sie einen int[][] aus den Strings benötigen, müssen Sie die int[][] iterieren und ausbaufähig machen. Wenn eine String[][] ausreicht, können Sie statt dessen eine neue String[][] an die .toArray() Methode geben.

+0

Was ist, wenn OP ein 'int [] []' benötigt, wie der Code zeigt, und nicht 'String [] []', wie Sie vorschlagen? – avojak

+0

Dann muss er irgendwie die Zeichenfolge [] zu int [] konvertieren: list.stream(). Map (stringArray -> createIntArrayFromString (stringArray))); – garnulf

0

Beachten Sie die Dokumentation für die .toArray() Methode:

Verwandte Themen