2017-08-25 121 views
-1
public static void main(String args[]){ 

    Scanner s = new Scanner(System.in); 
    int x; 
    int y; 
    int z = 0; 
    x = s.nextInt(); 
    y = s.nextInt(); 

    while(y != 0){ 
     z += x; 
     y--; 
    } 
    System.out.println(z); 
} 

这就是全部。 此代码计算x * y但不使用*。 这只是一个(任务?)有人告诉我。我的问题是为什么这是与负数工作。 x可能是负面的是显而易见的,但为什么y可以。我不明白为什么这个工作

编辑:我自己写了这段代码,所以我知道它为什么没有*。这不是问题。我可以输入5代表x和-5代表y,我可以得到-25。但为什么?每次他再增加一次x到z就会下降1。但在第五次停止后。

+5

flash news:'2 * 3 = 2 + 2 + 2';) – alfasin

+0

因为''x * y''''' x次y'; like 2 * 3 === 2 + 2 + 2 – DanilGholtsman

+0

如果你告诉我们你在x,y和z上使用什么输入,它会大大改善你的问题。如果你给你的变量赋予了有意义的名字,它会大大改善你的代码 –

回答

1

如果你把你就会明白,而里面的“Z”打印。

此代码使溢出。达到int允许的最大值并从那里再次减少

+0

我做到了。我明白你的意思了。但为什么我的循环停在正确的答案? Y永远不会达到0. – Konschi01

+0

@ Konschi01'y'最终会达到'0',但是很长。一旦达到最小可能值,它会回到max int,并保持递减直到达到'0'。 – azurefrog

+0

查看https://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo – azurefrog

0

此代码会产生多重总和。所以它可以总和数字2,3次,那就是2 * 3。

的Y可以是负的,因为如果是看到!=大于0,不<大于0

相关问题