为什么这不起作用?
private List<Integer> xShot = new ArrayList<Integer>();
...codes
...codes
...codes
...codes
xShot.get(0) += 5;
无法理解为什么作业的左侧不是变量..
有人帮忙吗?
答案 0 :(得分:4)
xShot.get(0)
是一个返回值的方法调用。变量是您使用包含值的类型声明的内容,例如示例中的int x;
,String name;
或List<Integer> xShot
。这些是Java中唯一可以使用assignment operator为其分配值的东西。
答案 1 :(得分:4)
虽然xShot.get(0)是一个数字,但它不是变量。您需要提供一个变量才能工作。那说
int i = xShot.get(0);
i += 5;
不行。 i
将增加5,但位置5中的xShot对象不是同一个对象。您需要获取,修改和设置变量。
例如:
xShot.set(0, xShot.get(0) + 5);
答案 2 :(得分:2)
xShot.get(0)
返回一个对象;它不是变量,因此您无法分配它。
此外,Integer
是不可变的(您无法更改其值),因此您必须使用 new 替换位置0
上的对象 Integer
具有计算值。
您可以像这样实现该行的目的:
xShot.set(0, xShot.get(0) + 5);
答案 3 :(得分:1)
就像在Java中说:
5 = 6; // "Assign 5 to 6"
左侧(5
)不可变。
为什么这个示例语句是相关的?因为Java使用始终“按值传递”。这意味着方法的返回值也是“按值返回”。 这是纯粹的数学:你不能改变一个值,你可以改变一个变量。 Java也一样。五个人永远不会变成六个人 换句话说:只能为变量分配值。
因此,正确的做法是:
xShot.set(0, xShot.get(0) + 5);
修改:在您的情况下:xShot.get(int)
不会返回变量,而是返回值。
答案 4 :(得分:0)
赋值的左侧必须是显式变量,因为在你的语句中,表达式也可以是常量,如果允许则会出错
答案 5 :(得分:0)
如果您只想增加5并且不仅限于List<Integer>
,那么您可以避免使用可疑的xShot.set(0, xShot.get(0) + 5)
并执行此操作:
List<AtomicInteger> xShot = new ArrayList<AtomicInteger>();
xShot.get(0).addAndGet(5);
这会将xShot.get(0)
中AtomicInteger
的值增加5,而不会更加轻松。