[英]Simple program using loops (Beginning Java)
我必須編寫一個使用循環的程序,該程序計算a和b(含)之間所有奇數的和,其中a和b為輸入。
我做了這個(下圖),它工作正常,但是我注意到了一個問題:當我輸入一個較大的數字,然后輸入一個較小的數字時,它返回0,但是當我首先輸入較小的數字時,它可以正常工作。 有任何快速解決方案嗎? :)
import java.util.Scanner;
public class ComputeSumAAndB
{
public static void main (String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Please enter 2 integers: "); //prompts user for ints
int a = in.nextInt();
int b = in.nextInt();
int sum = 0;
for (int j = a; j <= b; j++)
{
if (j % 2 == 1)
sum += j;
}
System.out.println("The sum of all odd numbers (inclusive) between " + a + " and "+ b + " is " + sum);
}
}
int temp;
if(a > b) {
temp = a;
a = b;
b = temp;
}
將其放在您的for
循環開始之前。
if
檢查a
(輸入的第一個數字)是否大於b
。 如果是,它將交換a
和b
。 現在,您的for
循環將始終從最小的數字開始,然后迭代到更大的數字(因為在此之后, if
a
始終是較小的數字)。
使用此方法具有使輸出有意義的附加副作用。 現在,您的輸出將始終顯示: "between [smaller number] and [larger number]"
。
rolfl的答案更優雅,而且效果很好,但是當用戶首先輸入較大的數字時,您的輸出可能看起來很奇怪: "between [larger number] and [smaller number]"
等
您可以使用Math.min()和Math.max函數獲得越來越小的輸入。
for (int j = Math.min(a,b); j <= Math.max(a,b); j++) {
if (j % 2 == 1) {
sum += j;
}
}
它不起作用,因為在for循環中A大於B ,而在A小於或等於B時進行迭代。
您可以執行nhgrif所說的,但是它正在更改您的數據。。但是他是正確的。
那是因為你首先期待的a
輸入(遜色限制),然后b
(上級)。 當程序到達for
, j = a
因此如果第一個輸入較大,則條件a <= b
為False。 換句話說,它永遠不會進入for
循環。
實際上,您應該做以下兩件事:
1就像上面提到的rolfl一樣。 您需要將min和max循環放置在正確的位置。
for(int j = Math.min(a,b); j <= Math.max(a,b); j ++){
if (j % 2 == 1) {
sum += j;
}
}
2使用if(j%2 == 1)不足以檢查num是否為奇數。
例如
a = -5 , b = 0; 結果如何?
int sum = 0;
for(int j=-5;j<0;j++)
{
if(j%2 == 1)
{
sum+=j;
}
}
sum的值為0。
我們需要將條件更改為if(!(j%2 == 0))然后,您將獲得預期的結果。
那是因為您首先期望輸入(下限),然后是b(上級)。 當程序到達for時,j = a,因此,如果第一個輸入較大,則條件a <= b為False。 換句話說,它永遠不會進入for循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.