如何切换数组列表中的每两项?
例如: “hi”,“how”,“are”,“you”成为:
“how”,“hi”,“you”,“are”
这是我的错误(在实践中 - 它):
编译器找到了一个它不期望的数据类型。有时在比较值时错误= for ==
会发生此错误意外类型
要求:变量
发现:价值
list.get(i)= list.get(i + 1);意外类型
要求:变量
发现:价值
list.get(i + 1)= temp;
这就是我所拥有的:
public void switchPairs(ArrayList<String> list){
String temp = "";
for(int i = 0; i<= list.size(); i+2){
temp = list.get(i);
list.get(i) = list.get(i+1);
list.get(i+1) = temp;
}
}
答案 0 :(得分:2)
您正尝试将get
方法的返回值用作变量。不像数组访问表达式,例如arr[i] = value
,这是合法的,方法调用的结果不能以这种方式使用。您必须改为使用set
method。
temp = list.get(i);
list.set(i, list.get(i + 1));
list.set(i + 1, temp);
这将修复编译器错误,但运行此错误将保证IndexOutOfBoundsException
。
如果列表大小均匀,则list.get(i)
会在IndexOutOfBoundsException
到达i
时抛出list.size()
。请记住,有效索引来自0
到size() - 1
。
如果列表大小为奇数,则list.get(i + 1)
会抛出IndexOutOfBoundsException
。
您必须将for
循环条件更改为在i
和 i + 1
超出范围之前停止。 (增量需要+=
才能产生效果。)
for(int i = 0; i < list.size() - 1; i+=2){
这会将最后一项保留在奇数大小的列表中。
答案 1 :(得分:0)
因为每个方法都返回value
,而不是variable
。
并且赋值运算符的左操作数必须是变量,否则会发生编译时错误。
你可以这样思考: 如果我们可以通过它的getter修改变量,那么封装会产生废话,因为通常会有私有属性的getter。
总之,在这种情况下(以及许多其他情况),您应该使用setter来获得金币。像这样:
list.set(i, "something you want");