2016-04-27 11 views
0

Ich versuche zu lernen, wie man eine ArrayList von Arrays verwendet. Ich denke, ich verstehe die Arrays gut genug, aber ich kämpfe mit dieser nächsten Dimension.Index von ArrayList von Array nachschlagen

Sie können aus meinem Code unten sehen, dass ich nur die Konzepte testen. Ich habe die exampleArrayList Funktion, aber ich kann nicht exampleArrayListofArrays herausfinden.

public void exampleArrayList() { 
     ArrayList<String> al = new ArrayList<String>(); 
     al.add("AZ"); 
     al.add("BY"); 
     al.add("CX"); 
     al.add("DW"); 
     al.add("EV"); 
     al.add("FU"); 
     al.add("GT"); 

     System.out.println("Index of 'AZ': "+al.indexOf("AZ")); 
     System.out.println("Index of 'FU': " + al.indexOf("FU")); 
     System.out.println("Index of 'AA': " + al.indexOf("AA")); 
     System.out.println("Index of 'CX': " + al.indexOf("CX")); 

     for (String row : al){ 
      System.out.println("Value at Index " + al.indexOf(row) + " is " + al.get(al.indexOf(row))); 
     } 
    } 

    public void exampleArrayListofArray() { 
     ArrayList<String []> al = new ArrayList<String []>(); 
     al.add(new String[] {"AB","YZ"}); 
     al.add(new String[] {"CD","WX"}); 
     al.add(new String[] {"EF","UV"}); 
     al.add(new String[] {"GH","ST"}); 
     al.add(new String[] {"IJ","QR"}); 
     al.add(new String[] {"KL","OP"}); 


     System.out.println("Index of 'AB': "+al.indexOf("AB")); 
     System.out.println("Index of 'YZ': "+al.indexOf("YZ")); 
     System.out.println("Index of 'AA': "+al.indexOf("AA")); 
     System.out.println("Index of 'IJ': "+al.indexOf("IJ")); 

     for (String [] row : al){ 
     for (int column = 0; column < 2 ; column ++); 
     System.out.println("Value at Index Row" + row + "Column " 
      + column + " is " + al.get(al.indexOf(row)[column])); 
     } 
    } 

Ich habe zwei Bereiche zu verstehen, die ich ausfüllen muss.

1) Wie kann ich den ArrayList-Index und den entsprechenden Array-Index für die beiden Buchstaben ausdrucken. Es scheint, ich brauche eine Schleife, war aber nicht sicher, wie es weitergehen soll. Ich möchte auch wissen, wann die Buchstaben nicht da sind, wie "AA", von dem ich annehme, dass er einen Index von -1 zurückgibt.

Zusätzlich möchte ich in der Lage sein, die gesamte ArrayList von Array auszudrucken und aus irgendeinem Grund erkennt mein println die int-Spalte nicht.

2) für die exampleArrayList Methode, die ich zunächst aus dem Wert am angegebenen Index mit diesem Code zu drucken versucht:

System.out.println("Value at Index " + al.indexOf(row) + " is " + al.get(row)); 

Und ich habe einen Fehler:

'get(int)' in 'java.util.ArrayList' cannot be applied to '(java.lang.String)'

Und I don‘ Ich verstehe warum.

Vielen Dank für Ihre Hilfe bei diesen Fragen.

Airfix

Antwort

1
al.indexOf(row)[column] returns a String. 

Die get Methode wollen ein int. Der Fehler ist also offensichtlich.

Außerdem:

 for (String [] row : al){ 
     for (int column = 0; column < 2 ; column ++); 
     System.out.println("Value at Index Row" + row + "Column " 
      + column + " is " + al.get(al.indexOf(row)[column])); // column here is not define!!! 
     } 

Try this:

  for (String [] row : al) 
      for (int column = 0; column < 2 ; column ++){ 
      System.out.println("Value at Index Row" + row + "Column " 
       + column + " is " + row[column]); 
      } 
0

Spezifisches Element kann row[column]

for (String [] row : al){ 
    for (int column = 0; column < 2 ; column ++); 
    System.out.println("Value at Index Row" + row + "Column " 
     + column + " is " + row[column]); 
    } 
} 

Wie Sie bereits die Array-Instanz in Außen bei einem Index für Schleife bekamen mit ausgedruckt werden. Jetzt können Sie einfach die Werte in diesem Array drucken, indem Sie den Spaltenindex verwenden.

System.out.println("Value at Index " + al.indexOf(row) + " is " + al.get(row)); 

gibt Ihnen Fehler bei al.get(row) weil ArrayList.get Methode einen Index, der int akzeptiert Wert ist.

Hoffe, das hilft.

0

Arrays und ArrayLists sind nicht für die Rückwärtssuche gedacht. Es ist möglich, sie mit einer Schleife zu durchlaufen und alle Werte zu testen, aber es ist äußerst ineffizient. Versuchen Sie stattdessen eine HashMap.

Hier können Sie einen Index für einen String speichern und später danach fragen.

+0

Ich bin nicht vertraut mit den Fähigkeiten von HashMap.Letztendlich möchte ich, dass mein abschließender Code dies tut: A) Füllen Sie eine ArrayList (oder HashMap) aus einer TXT-Datei aus einer Asset-Datei (etwa 100 Zeilen lang und 3 Spalten). B) Basierend auf Benutzereingabetext möchte ich die arrayList-Spalte 1 nach dem Text durchsuchen und die Werte in Spalte 2 und 3 für einige Berechnungen zurückgeben. C) Wenn die Benutzerzeichenfolge nicht gefunden wird, möchte ich, dass der Benutzer die Werte in den Spalten 2 und 3 erstellen kann. Speichern Sie die Daten in der ArrayList (HashMap), sortieren Sie die ArrayList in alphabetischer Reihenfolge und speichern Sie das Array wieder im Asset Textdatei. – Airfix

+0

Sie könnten eine neue Klasse RowColumn mit zwei int-Werten definieren, die die Informationen der Spalten 2 und 3 enthält. Dann können Sie eine HashMap definieren und Elemente darin einfügen (mit dem Befehl put). Mit get erhalten Sie die RowColumn für jeden String. Zum zeilenweisen Lesen und Schreiben der Datei können Sie FileUtils of apache (oder einige Java 7-Features der Files-Klasse) verwenden. –