繁体   English   中英

无法在ArrayList中执行交换

[英]Unable to perform swapping in ArrayList

我应该写一个方法来交换ArrayList元素,它们是字符串。我想出了以下方法。这给我一个错误,

线程“主”中的异常java.util.AbstractList.add(AbstractList.java:148)在Alternate_ArrayList.swapPairs(Alternate_ArrayList.java:139)处在Alternate_ArrayList.main(Alternate_ArrayList.java:56)上的java.lang.UnsupportedOperationException异常

我的方法是:

  public static List swapPairs(List<String> students)
    {
        String temp="";
        String temp2="";
        if(students.size()%2==0)
        {
            for(int i=0;i<students.size()-2;i++)
            {
                temp=students.get(i);
                temp2=students.get(i+1);
                students.add(i,temp2);
                students.add(i+1,temp);



            }
            return  students;
        }
        return  students;
    }

我的主要是:

public class Alternate_ArrayList {
public static void main(String args[])
{
List<String> students=new ArrayList<String>();
    students=Arrays.asList("B","R","M","F");
    System.out.println("Sawp pair: " + swapPairs(students));
}
}

'set(index,object)使错误消失了。但是,现在我的前2个元素被交换了,但是不是后两个。

一些建议会很好。

谢谢

使用ArrayList.set(index,Object)方法而不是add来替换索引处的值,如下所示:

students.set(i,temp2);

我不确定您对“交换”的定义是什么,但是如果您只想交换学生对,则可能需要执行以下操作:

public static List<String> swapPairs(List<String> students)
{
    String temp;
    String temp2;
    if(students.size()%2==0)
    {
        for(int i=0;i<students.size();i+=2)
        {
            temp=students.get(i);
            temp2=students.get(i+1);
            students.set(i,temp2);
            students.set(i+1,temp);
        }
    }
    return  students;
}

您在参数中收到的列表似乎是不可变的列表,因此无法修改。
查看方法的调用者以检查您的列表并进行修复。
或者,如果您愿意,也可以基于在方法开始时作为参数传递的列表创建一个新列表:

List<String> newList = new ArrayList<>(students)

更新:

在您的主要方法中,Arrays.asList()返回一个固定大小的列表。 您不能在其上使用add()。 如果只想交换,请使用set()而不是add()。 如果您需要更改列表的大小,请按照我在回答开始时所说的进行操作,然后创建一个新列表。

由于添加,代码似乎陷入了无限循环。 试试下面的代码,看看它是否有效:

public static List swapPairs(List<String> students)
    {
        String temp="";
        String temp2="";
        if(students.size()%2==0)
        {

            //Removed size()-1 to handle lists with two elements and added I=1+2 to swap alternate elements.
            for(int i=0;i<students.size() ;i=i+2)
            {
                temp=students.get(i);
                temp2=students.get(i+1);
                students.set(i,temp2);
                students.set(i+1,temp);



            }
            return  students;
        }
        return  students;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM