所以我主要担心的是如何在arraylist中轻松找到某些值,例如,如果我有一个充满名字的arraylist,我怎么能轻易删除它?打印和比较arraylist“studeranden”并没有给出它包含的真实值,而是(我认为)取值的位置,例如“[Mom1 $ studs @bebdb06]”。我怎么能绕过这个?
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;
}}
}
答案 0 :(得分:0)
int xx = n_studeranden.indexOf(x);
这会失败,因为列表不包含String对象但是包含studs对象。您需要遍历列表,将x字符串与每个字符串进行比较。名称。您可以使用ListIterator删除找到的元素。
ListIterator<studs> it = studeranden.listIterator();
boolean end = false;
while (it.hasNext() && !end) {
if (it.next().getName().equals(x)) {
it.remove();
end = true;
}
}
答案 1 :(得分: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 );
}
但请确保您的Student类包含方法
public String toString(){
return this.getName(); // append more data
}
如果你有这种方法,你甚至可以
System.out.println( students );
虽然这种安排(全部在一行中)可能不会让你高兴。
答案 2 :(得分:0)
int xx = n_studeranden.indexOf(x)
问题: n_studeranden包含了类型为studs的对象。您正在寻找String的索引。
System.out.println(n_studeranden);
问题:如果要打印ArrayList的内容,请对其进行迭代并打印每个元素的各个名称。
Possitble解决方案像Paco说的那样,您可以迭代每个元素并检查名称是否匹配。但是,我认为在这里使用不同的数据结构会更简洁。例如,螺柱的地图名称为螺柱对象,因此您可以通过其名称
轻松访问各个螺柱