2017-08-25 92 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

相關問題