3

谁能解释以下两个程序之间的区别?它们看起来和我一样,但它们产生不同的输出。什么原因?

程序1:输出错误值;i=1

public class Test1{
    public static void main(String[] args) {
        int[] values = new int[] { 2, 3, 5, 1 };

        int i = 0;
        for (Integer integer : values) {
            i =+ integer.intValue();
        } // for loop ends
        System.out.println("i=" + i);
    }
} 

方案 2:输出预期值;i=11"

public class Test2{
    public static void main(String[] args) {
        int[] values = new int[] { 2, 3, 5, 1 };

        int i = 0;
        for (Integer integer : values) {
            i = i + integer.intValue();
        } // for loop ends
        System.out.println("i=" + i);
    }
} 
4

8 回答 8

17

显然,主要区别在于这一行:

i =+ integer.intValue();

也许它打算在第一个程序中使用i +=而不是。i =+在您的版本中,第一个程序只是在每次迭代时分配一个值,因此最终结果是数组中的最后一个值(即1)。你的第二个程序做了它应该做的事情 - 它添加了数组中的所有元素,它的结果是11.

于 2013-07-05T06:54:04.207 回答
10

您尝试添加和分配,但使用了错误的运算符。

 for (Integer integer : values) {
     i =+ integer.intValue();
 } // for loop ends

这转化为i = (+ integer.intvalue())

正确的是:

for (Integer integer : values) {
     i += integer.intValue();
 } // for loop ends
于 2013-07-05T06:55:55.373 回答
5

您正在使用=+而不是+=

您可能只将数组中的最后一个值打印在一个中,而将总和打印在另一个中?

那是因为您只是在一个中重复覆盖该值,并实际上在另一个中正确地对这些值求和。

于 2013-07-05T06:55:30.720 回答
4

i =+ integer.intValue();是一元运算的重新赋值+integer.intValue()。您正在i用数组中的每个值覆盖。最后一个是最终结果。

于 2013-07-05T06:55:33.590 回答
4

因为您使用的是一元运算符 '+',它对整数的符号进行运算并且不进行加法运算。

所以基本上发生的事情是变量i将包含值数组中的最后一个值。

编辑:

Java中一元加号运算符的使用

当数组值为时,假设 -1 在这种情况下,由于符号的良好旧数学规则

  • (+)(+) = (+)
  • (+)(-) = (-)
  • (-)(+) = (-)
  • (-)(-) = (+)

所以当你这样做的时候i = (+ (-1)) = -1。答案仍然是-1

因此,如果您保留数组的最后一个值 -1 或其他负值,您将获得相同的值。

于 2013-07-05T06:57:49.490 回答
3

类test1代码有什么问题吗?似乎它应该i + =integer.intValue() 代替=+

于 2013-07-05T06:55:34.397 回答
3

总是在 = 之前运算符(+,-,| 等)

+= ,-=, |=

或者甚至是比较运算符 <=, >= ....

于 2013-07-05T08:30:51.613 回答
0
    int[] values = new int[] { 2, 3, 5, 1 };
    int i = 0;
    for (Integer integer : values) {
        i =+ integer.intValue();// here i's value  2,3,5 and finally 1. then your out put is 1.
    } // for loop ends
    System.out.println("i=" + i);

但是您的下一个案例是在数组中将 i 的当前值与 int 值相加。所以很明显你会在数组中得到一些 int 值。

    int[] values = new int[] { 2, 3, 5, 1 };
    int i = 0;
    for (Integer integer : values) {
        i = i + integer.intValue();
    } // for loop ends
    System.out.println("i=" + i);
于 2013-07-05T07:06:05.973 回答