赋值表达式的编译错误

时间:2015-04-03 22:18:55

标签: java variable-assignment

如何切换数组列表中的每两项?

例如: “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;
        }
    }

2 个答案:

答案 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()。请记住,有效索引来自0size() - 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");