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

时间:2015-03-05 00:52:47

标签: java

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

你如何解释这个java代码?

Int k;
For (k=0; k < nums.length; k++) {
       nums [k] -= sign (nums [k]);
       nums [k] += sign (nums [k]);
}

在说明中它说int [] nums= {-2,-1,0,1,2}。它还说  int sign(int x)如果为正则返回1,如果为负则返回-1,如果x为0,则返回0。

我想我需要了解代码中发生了什么&#34; - &#34;和&#34; =&#34;彼此相邻。而且当&#34; +&#34;和&#34; =&#34;彼此相邻。

2 个答案:

答案 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]);

答案 1 :(得分:0)

循环中的第一个操作,

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

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

循环中的第二个操作

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

将1添加到正数并从负数中减去1,将其绝对值增加1。

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

但是,有一些细微之处。

  1. 如果数字为1或-1,它将向零移动,并变为0.在这种情况下,第二步什么都不做扭转行动。换句话说,这段代码是一种非常模糊和低效的将1和-1转换为0的方法。
  2. 如果存在整数上溢或下溢(数字为Integer.MAXINT),则会发生有趣的事情 - 这是留给读者的练习。由于您的输入是小整数,因此不适用于您的确切情况。