2011-08-21 51 views
2

为什么这不能工作?作业的左侧必须是变量

private List<Integer> xShot = new ArrayList<Integer>(); 
    ...codes 
    ...codes 
    ...codes 
    ...codes 
    xShot.get(0) += 5; 

不明白为什么一个assignment'isn't的左侧是一个变量..

有人帮忙吗?

+1

您正在从列表中取第一个元素,然后将其与5进行求和并将结果置于空(实际上是指该特定整数) - 这就是问题所在。 这就像你写了'5 + = 5'。 5从左侧不是一个变量 –

回答

0

如果你只是想通过5递增,并且不限于List<Integer>具体情况,你可以避开冗长的争论和xShot.set(0, xShot.get(0) + 5)做到这一点,而不是:

List<AtomicInteger> xShot = new ArrayList<AtomicInteger>(); 
xShot.get(0).addAndGet(5); 

这将通过就地5不用再费周折递增AtomicIntegerxShot.get(0)值。

4

xShot.get(0)是一个返回值的方法调用。变量是您声明的某个类型的值,例如您的示例中的int x;String name;List<Integer> xShot。这些是Java中唯一可以使用assignment operator赋值的东西。

0

赋值的左侧必须是明确的变量,因为在你的发言时,表达可以是一个常数也,如果允许

+0

非常感谢帮助家伙:D – Daniel

4

这将是一个错误。虽然xShot.get(0 )是一个数字,它不是一个变量。你需要提供一个变量来使其工作。这就是说

int i = xShot.get(0); 
i += 5; 

将无法​​正常工作。 i将增加5,但位置5中的xShot对象不是同一个对象。您需要获取,修改和设置变量。

例如:

xShot.set(0, xShot.get(0) + 5); 
1

它就像在Java中说:

5 = 6; // "Assign 5 to 6" 

左侧(5)不是可变的。

为什么这个示例语句是相关的?由于Java使用总是“传递值”。这意味着一个方法的返回值的值也是“按值返回”。 这是纯粹的数学:你不能改变一个值,你可以改变一个变量。 Java也是一样。五不能成为六。
换句话说:只有一个值可以分配给一个变量。

所以,做你想要什么样的正确方法是:

xShot.set(0, xShot.get(0) + 5); 

编辑:在您的情况:xShot.get(int)不会返回一个变量,而是一个值。

2

xShot.get(0)返回一个对象;它不是变量,所以你不能分配给它。

此外,Integer是不可变的(你不能改变它的值),那么你就必须Integer具有计算值替换对象在0位置。

可以实现该行这样的意图:

xShot.set(0, xShot.get(0) + 5);