对于循环和符号运算符,请阅读Java

对于循环和符号运算符,请阅读Java,java,Java,我正在辅导一名高中生,我的CS语言技能需要帮助 如何解释这段java代码 Int k; For (k=0; k < nums.length; k++) { nums [k] -= sign (nums [k]); nums [k] += sign (nums [k]); } intk; 对于(k=0;k

我正在辅导一名高中生,我的CS语言技能需要帮助

如何解释这段java代码

Int k;
For (k=0; k < nums.length; k++) {
       nums [k] -= sign (nums [k]);
       nums [k] += sign (nums [k]);
}
intk;
对于(k=0;k
在指令中,它表示
int[]nums={-2,-1,0,1,2}
。它还说
int-sign(int-x)
如果为正,则返回1;如果为负,则返回-1;如果x为0,则返回0


我想我需要理解代码中“-”和“=”相邻的地方发生了什么。以及当“+”和“=”相邻时会发生什么情况。

复合赋值操作

   nums [k] -= sign (nums [k]);
   nums [k] += sign (nums [k]);

nums [k] = nums [k] - sign (nums [k]);
nums [k] = nums [k] + sign (nums [k]);

循环中的第一个操作

nums[k]-=符号(nums[k])

将正数减去1,负数加1。实际上,将数字“1”移到零。(或将其绝对值减少1)

循环中的第二个操作

nums[k]+=符号(nums[k])

将正数加1,负数减1,将其绝对值增加1

因此,随便一看,代码除了浪费CPU周期外,什么都不做。:-)

然而,也有一些微妙之处

  • 如果数字为1或-1,它将向零移动,并变为0。在这种情况下,第二步将不执行任何操作,并将反转操作。换句话说,这段代码是一种非常晦涩且低效的将1和-1转换为0的方法
  • 如果有一个整数溢出或下溢(一个数字是integer.MAXINT),那么有趣的事情就会发生——这将留给读者作为练习。因为您的输入是小整数,所以这不适用于您的确切情况