2015-02-11 89 views
-1

所以我主要關心的是如何輕鬆地找到arraylist中的某些值,例如,如果我有一個充滿名稱的數組列表,我該如何輕鬆地刪除它?打印並比較陣列表「studeranden」並沒有給出它包含的真實價值,而是(我認爲)價值觀的位置,例如「[Mom1 $ studs @ bebdb06]」。我怎麼能繞過這個?在Java中主要和其他方法打印和使用arraylist

public static void main(String[] args) { 
    ArrayList<studs> studeranden = new ArrayList<studs>(); 
    boolean StilldrDRE = true; 
    String[] alternativ = new String[5]; 
    alternativ[0] = "Lägg till namn"; alternativ[1] = "ta bort namn"; alternativ[2] = "Swappa plats på två namn"; alternativ[3] = ""; alternativ[4] = "avsluta"; 
    Object[] possibilities = alternativ; 
    while (StilldrDRE) { 
     Component frame = null; 
     Icon icon = null; 
     String s = (String)JOptionPane.showInputDialog(frame,"Vad skulle du villa göra? ", null, JOptionPane.PLAIN_MESSAGE, icon, possibilities, alternativ); 
     if(s=="Lägg till namn") { 
      String indata = JOptionPane.showInputDialog(null, "Vem vill du adda till listan? (t.ex \" Anton Heikinheimo, 38992\")"); 
      studs p = new studs(indata); 
      studeranden.add(p); 

     } 

     if(s=="ta bort namn") { 
      String indata = JOptionPane.showInputDialog(null, "Vem vill du ta bort från listan? (t.ex \" Anton Heikinheimo, 38992\")"); 
      removeName(studeranden, indata); 
     } 

     if(s=="avsluta") { 
      break; 
      //    for (int i = 0; i < studeranden.size(); i++) { 
      //    studs value = studeranden.get(i); 
      //    System.out.println("Element: " + value.getstud()); 
     }} 




} 
public static void removeName(ArrayList<studs> n_studeranden, String x) { 
    int xx = n_studeranden.indexOf(x); 
    System.out.println(n_studeranden); 
    n_studeranden.remove(xx+1); 
    JOptionPane.showMessageDialog(null, x + " togs bort från listan"); 
} 
//else JOptionPane.showInputDialog(null, x + " hittades inte i listan"); 




public static class studs { 
    String name; 
    String matrik; 
    String data; 
    String x; 
    studs (String namn) { 
     data = namn; 
     String[] parts = data.split(","); 
     name = parts[0]; 
     matrik = parts[1]; 
    } 

    String getstud() { 
     x = name + matrik; 
     return x; 
    }} 

}

+4

請勿使用'=='來比較字符串值! – laune 2015-02-11 07:51:39

回答

0

隨着

List<String> names = ...; 

names.remove("Anton") 

是所有你所需要的。你甚至可以

if(names.remove("Anton")){ 
    System.out.println("Anton could be removed"); 
} else { 
    System.out.println("Anton doesn't study here"); 
} 

如果你有對象的列表,你必須編寫一些代碼來識別物體,而你遍歷列表:

for(int i = 0; i < students.size(); ++i){ 
    Student s = students.get(i); 
    if("Anton".equals(s.getName())){ 
     students.delete(i); 
     break; 
    } 
} 

要打印所有學生,用類似的循環或:

for(Student s: students){ 
    System.out.println(s); 
} 

但要確保你的學生類包含的方法

public String toString(){ 
    return this.getName(); // append more data 
} 

如果你有這種方法,你甚至可以

System.out.println(students); 

雖然安排(全部在同一行)可能無法取悅你。

0
int xx = n_studeranden.indexOf(x); 

失敗的原因列表中不包含String對象,但螺柱對象。您需要迭代比較x字符串和每個studs名稱的列表。您可以使用ListIterator刪除找到的元素。

ListIterator<studs> it = studeranden.listIterator(); 
boolean end = false; 
while (it.hasNext() && !end) { 
    if (it.next().getName().equals(x)) { 
     it.remove(); 
     end = true; 
    } 
} 
0
int xx = n_studeranden.indexOf(x) 

問題:類型螺柱 n_studeranden containes對象。您正在查找字符串的索引。


System.out.println(n_studeranden); 

問題:如果你想打印的ArrayList的內容,迭代並打印每個元素的個人的名字。


Possitble解決方案:像帕科說,你可以遍歷每個元素並檢查名稱是否相匹配。但是,我認爲在這裏使用不同的數據結構會更好。例如,將柱頭螺栓名稱映射到螺柱對象,以便您可以通過名稱輕鬆訪問各個柱頭螺栓

相關問題