在Java中的主要方法和其他方法中打印和使用arraylists

时间:2015-02-11 07:35:16

标签: java indexing arraylist

所以我主要担心的是如何在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;
    }}

}

3 个答案:

答案 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说的那样,您可以迭代每个元素并检查名称是否匹配。但是,我认为在这里使用不同的数据结构会更简洁。例如,螺柱的地图名称为螺柱对象,因此您可以通过其名称

轻松访问各个螺柱