我必须写一个方法:
如果尺寸均匀---->>切换前两个值的顺序,然后切换下两个值的顺序等
如果尺寸为奇数---->>如上所述,但不要触及最后一个元素。
不必返回任何内容(无效)
public static void switchPairs(ArrayList<String> al){
//temporary object definition
String temp = null;
//size is even
if(al.size() %2==0){
//loop through the entire arraylist
for(int i=0; i<al.size()-1; i++){
//get the n+1 element and assign it to a temp variable
temp=al.get(i+1);
//assign the n+1 element to the n position
al.add(i, temp);
}
} else { //size is odd
//loop through the entire arraylist
}
System.out.println("After switching pairs.");
System.out.println(al);
}
输出:
请帮助我! 谢谢!
答案 0 :(得分:1)
您应该使用 set method 更新现有的ArrayList元素。通过添加到ArrayList,您将增加其大小,因此您的循环永远不会终止,因为 i 的结束条件等于大小减1。这种情况永远不会得到满足,因此您的收藏会不断增长,直到您的内存不足为止。
for(int i=0; i<al.size()-1; i++){
tmp = al.get(i+1);
al.set(i+1,al.get(i));
al.set(i, tmp) //assign the n+1 element to the n position
}
答案 1 :(得分:0)
所以这里的问题是你要添加到arraylist,但你永远不会拿出任何东西。您必须删除第二个值,然后将其重新添加。
temp = al.remove(i+1);
或
temp = al.get(i+1);
al.remove(i+1);
由于你永远不会删除该值,因此每个新值的arraylist都会变大,就像指数函数一样。
答案 2 :(得分:0)
在您的代码中,您没有替换arraylist
的相关索引中的值,而是通过{arraylist
添加更多元素来增加al.add()
的大小。 1}}方法(这里实际发生的是你添加的元素,插入到当前i
位置,同时将当前位置的元素(如果有的话)和右边的任何后续元素添加到他们的指数)。
要重置或替换arraylist中的值,您需要使用set()
方法。如果您需要循环到列表末尾,并在for loop
中将其更改为for(int i=0; i<al.size(); i++){...}
。请尝试以下代码
public static void switchPairs(ArrayList<String> al){
String temp=null;
if(al.size() %2==0){ //size is even
//loop through the entire arraylist
for(int i=0; i<al.size(); i++){
temp=al.get(i+1); //get the n+1 element and assign it to a temp variable
al.set(i, temp); //assign the n+1 element to the n position
}
}else{ //size is odd
//loop through the entire arraylist
}
System.out.println("After switching pairs.");
System.out.println(al);
}