我应该写一个方法来交换ArrayList元素,这是string.I提出了以下方法。这给了我一个错误,
线程“main”中的异常java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148)at Alternate_ArrayList.swapPairs(Alternate_ArrayList.java:139)at at Alternate_ArrayList.main(Alternate_ArrayList.java:56)
我的方法是:
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个元素被交换了,而不是最后两个元素。
有些建议会很好。
由于
答案 0 :(得分:0)
使用 ArrayList.set(index,Object)方法而不是add来替换索引处的值,如下所示:
students.set(i,temp2);
答案 1 :(得分:0)
我不确定你对&#34; swap&#34;的定义究竟是什么,但如果你只是想交换学生对,你可能想做这样的事情:
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;
}
答案 2 :(得分:0)
您在参数中收到的列表似乎是一个不可变列表,因此无法修改。
查看方法的调用者以检查列表并进行修复
或者,如果您愿意,还可以根据方法开头作为参数传递的列表创建新列表:
List<String> newList = new ArrayList<>(students)
更新:
在main方法中,Arrays.asList()返回一个固定大小的列表。你不能在它上面使用add()。如果您只想交换,请使用set()而不是add()。如果您需要更改列表的大小,请按照我在答案开头所说的那样创建一个新列表。
答案 3 :(得分:0)
由于添加,代码似乎进入无限循环。试试这段代码,看看它是否有效:
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;
}