为什么这不能工作?作业的左侧必须是变量
private List<Integer> xShot = new ArrayList<Integer>();
...codes
...codes
...codes
...codes
xShot.get(0) += 5;
不明白为什么一个assignment'isn't的左侧是一个变量..
有人帮忙吗?
为什么这不能工作?作业的左侧必须是变量
private List<Integer> xShot = new ArrayList<Integer>();
...codes
...codes
...codes
...codes
xShot.get(0) += 5;
不明白为什么一个assignment'isn't的左侧是一个变量..
有人帮忙吗?
如果你只是想通过5递增,并且不限于List<Integer>
具体情况,你可以避开冗长的争论和xShot.set(0, xShot.get(0) + 5)
做到这一点,而不是:
List<AtomicInteger> xShot = new ArrayList<AtomicInteger>();
xShot.get(0).addAndGet(5);
这将通过就地5不用再费周折递增AtomicInteger
在xShot.get(0)
值。
xShot.get(0)
是一个返回值的方法调用。变量是您声明的某个类型的值,例如您的示例中的int x;
,String name;
或List<Integer> xShot
。这些是Java中唯一可以使用assignment operator赋值的东西。
这将是一个错误。虽然xShot.get(0 )是一个数字,它不是一个变量。你需要提供一个变量来使其工作。这就是说
int i = xShot.get(0);
i += 5;
将无法正常工作。 i
将增加5,但位置5中的xShot对象不是同一个对象。您需要获取,修改和设置变量。
例如:
xShot.set(0, xShot.get(0) + 5);
它就像在Java中说:
5 = 6; // "Assign 5 to 6"
左侧(5
)不是可变的。
为什么这个示例语句是相关的?由于Java使用总是“传递值”。这意味着一个方法的返回值的值也是“按值返回”。 这是纯粹的数学:你不能改变一个值,你可以改变一个变量。 Java也是一样。五不能成为六。
换句话说:只有一个值可以分配给一个变量。
所以,做你想要什么样的正确方法是:
xShot.set(0, xShot.get(0) + 5);
编辑:在您的情况:xShot.get(int)
不会返回一个变量,而是一个值。
xShot.get(0)
返回一个对象;它不是变量,所以你不能分配给它。
此外,Integer
是不可变的(你不能改变它的值),那么你就必须与新Integer
具有计算值替换对象在0
位置。
可以实现该行这样的意图:
xShot.set(0, xShot.get(0) + 5);
您正在从列表中取第一个元素,然后将其与5进行求和并将结果置于空(实际上是指该特定整数) - 这就是问题所在。 这就像你写了'5 + = 5'。 5从左侧不是一个变量 –