2017-09-27 107 views
2

說明:編寫一個讓用戶輸入N並輸出N的程序! (表示N *(N-1)(N-2) ... * 2 * 1)。提示:初始化變量totalValue爲N,並使用從N-1到1的循環變量i。5!是120,但輸出讀數爲1!是120?

從我對Java因子的理解中,5! = 5 * 4 * 3 * 2 * 1 = 120 因此,當我在本練習中計算Java因子時,我輸入5作爲用戶輸入以測試我是否能夠正確計算Java因子。但是輸出結果爲1!是120.這是我的代碼的一部分,只是窺見一斑:

userInt = scnr.nextInt(); 
// FIXME: Ask user to input an integer, store in userInt 

totalVal = userInt; 

while (userInt > 1) { 
    userInt = userInt - 1; 
    totalVal = userInt * totalVal; 

} // FIXME: Add while loop that counts down to 1, updating totalVal 
System.out.println(userInt + "! is " + totalVal); 
} //After typing 5 and clicking Run, it shows 1! is 120 

從我的註釋// FIXME的理解:要求用戶輸入一個整數,存放於userInt //,我輸入了「 5'作爲試圖計算階乘的測試。因此,在輸入5作爲用戶輸入時,爲什麼沒有達到5!是120?爲什麼不是5!是120?

是否可以從我的代碼解釋爲什麼它是1!是120而不是5!是120?或者爲什麼它應該是5!是120,因爲我一直假設它是? 預先感謝您,我正試圖圍繞這一點來解決我的問題。

+4

因爲你遞減'userInt'直到它達到1.什麼讓你感到困惑? – shmosel

+0

遞減時,糾正我,如果我錯了,也就是說,我=我-1?所以這就是說在我的代碼中它是1!因爲userInt = userInt - 1是120?現在爲什麼它是1是有道理的!是120.我一開始感到困惑,因爲我認爲5! = 5 * 4 * 3 * 2 * 1 = 120,我假設輸出應該顯示爲5!是120 – acruz30

+0

完全正確。 – shmosel

回答

0

while循環後,userInt變爲1

userInt = userInt - 1; < =重複,直到它變爲1

在另一個變量中備份userInt。

0

您在while循環中突變了userInt變量,所以在打印時它總是打印1。

在while循環之前將用戶int存儲在另一個變量中,並打印出來。

3

您正在遞減userInt,直到達到1.您可以通過添加並使用持有人整數變量來解決此問題。

userInt = scnr.nextInt(); 

int holder = userInt; 

totalVal = userInt; 

while (userInt > 1) { 
userInt = userInt - 1; 
totalVal = userInt * totalVal; 

} // FIXME: Add while loop that counts down to 1, updating totalVal 
System.out.println(holder + "! is " + totalVal); 
} //After typing 5 and clicking Run, it shows 1! is 120