2013-12-13 31 views
0

我想從用戶輸入的數字中找到偶數和甚至最大值。例如,如果他們回答「多少個整數?」與4和輸入的整數:2,9,18,4它應該輸出:找到偶數,甚至最大

how many integers? 4 
next integer? 2 
next integer? 9 
next integer? 18 
next integer? 4 
even sum = 24 
even max = 18 

這裏是我的代碼:

public static void evenSum(){ 
     //prompt the user to enter the amount of integers 
     Scanner console = new Scanner(System.in); 
     System.out.print("how many integers? "); 
     int numbers = console.nextInt(); 
     //prompt user to enter the first integer 
     System.out.print("next integer? "); 
     int firstNum = console.nextInt(); 
     //set the even max to the firstNum 
     int evenMax = firstNum; 
     //set the evenSum to zero 
     int evenSum = 0; 
     //for loop for the number of times to ask user to input numbers 
     for (int i = 2; i <= numbers; i++) { 
      System.out.print("next integer? "); 
      int num = console.nextInt(); 
      //check to see if the first number is even 
      if (firstNum % 2 == 0){ 
      //if it is even then add it to the evenSum 
       evenSum += firstNum; 
      } 
      //check to see if the numbers entered are even 
      if (num % 2 == 0) { 
      //if they are even add them to the evenSum 
       evenSum += num; 
      } 
      //check to see if the number entered is bigger than the first number 
      if (num > firstNum) { 
       if (num % 2 == 0 ) { 
        evenMax = num; 
       } 
      } 
     } 
     System.out.println("even sum = " +evenSum); 
     System.out.println("even max = " +evenMax); 
} 

但這裏是我的輸出是什麼:

how many integers? 4 
next integer? 2 
next integer? 9 
next integer? 18 
next integer? 4 
even sum = 28 
even max = 4 

有人可以幫我弄清楚問題是什麼?

+2

在for循環中,如果firstNum是偶數,則在每次迭代時將'firstNum'添加到'evenNum'。移動'if(firstNum%2 == 0){even_more + = firstNum;在循環之外。 –

+0

爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 「短」之後關注術語的各個部分。 –

+1

爲什麼你對待第一個值如此不同?我沒有看到任何理由處理第一個值與以後的值不同。 –

回答

0

你在做一些非常奇怪的東西,第一次輸入數字時被視爲特殊。這導致輸入的第一個偶數(在這種情況下爲2)被添加多次。

把所有的輸入在相同的循環,這樣就可以平等地對待一切:

public static void evenSum(){ 
    //prompt the user to enter the amount of integers 
    Scanner console = new Scanner(System.in); 

    System.out.print("how many integers? "); 
    int numbers = console.nextInt(); 

    int evenSum = 0; 
    int evenMax = 0; 

    //for loop for the number of times to ask user to input numbers 
    for (int i = 0; i < numbers; i++) { 
     //input new number 
     System.out.print("next integer? "); 
     int num = console.nextInt(); 

     //check to see if the number is even. if it is not even, 
     //we don't care about it at all and just go to the next one 
     if (num % 2 == 0){ 
      //add it to the sum 
      evenSum += num; 

      //if it's larger than the maximum, set the new maximum 
      if (num > evenMax) { 
       evenMax = num; 
      } 
     } 
    } 
    System.out.println("even sum = " +evenSum); 
    System.out.println("even max = " +evenMax); 
} 

正如你所看到的,這個代碼也才檢查是否一個數是偶數一次。在每次使用時都不需要連續檢查是否爲num:在單次循環的持續時間內,其值不會改變。

+1

我注意到這幾乎都是正確的,除了evenSum + = firstNum需要evenSum + = num。 – a24

+0

謝謝!看起來我保留了錯誤的路線。良好的捕獲,編輯修復。 – Mumbleskates

0

將下面的代碼裏面的for循環之前剛剛爲環 -

if (firstNum % 2 == 0){ 
     //if it is even then add it to the evenSum 
     evenSum += firstNum; 
} 

這將阻止第一個數字在evenSum

0

反覆另外你也想

if (num > evenMax) { 
    if (num % 2 == 0) { 
     evenMax = num; 
    } 
} 

或者

if (num > evenMax && num % 2 == 0) { 
    evenMax = num; 
} 

在你的場景中,firstNum是2,因此它後面的每個數字在技術上都比較大,所以你(理論上)不會得到在第一個數字後輸入的最大偶數。

0

將for循環中的第一個if條件向上(for循環之外) 或將所有用戶輸入存儲在數據結構(即Array)中,然後再處理它們。 將它們存儲在Array中可以更容易地處理數據。

+0

「在foor循環內向上(for循環的外部)」...?我不知道你是什麼意思。 – Mumbleskates

+0

我的意思是把for循環中的第一個條件移到它外面。是不是很難理解先生?我認爲給予我的回答的人非常清楚地得到了這個觀點 – 2013-12-16 14:53:24

+0

請看,我仍然無法真正說出你在這裏所說的100%。發佈答案時,語法,標點符號和清晰度非常重要。 – Mumbleskates

0

工作代碼: -

Scanner console = new Scanner(System.in); 
    int numbers =0, firstNum =0, num =0 ;   
    System.out.print("how many integers? "); 
    numbers = console.nextInt(); 
    System.out.print("next integer? "); 
    firstNum = console.nextInt(); 
    int evenMax = 0; 
    int evenSum = 0; 

    if(firstNum%2==0) 
    { 
    evenSum = firstNum; 
    evenMax = firstNum; 
    } 


    for (int i = 1; i < numbers; i++) { 
     System.out.print("next integer? "); 
     num = console.nextInt(); 



    if (num % 2 == 0) { 
//don't add firstNum multiple times to the evenSum, earlier it was added every time you entered an even number 
       evenSum += num; 

//check if the number you entered, i.e. num greater than the already existing greatest number i.e. evenMax and if so update it 
       evenMax = num > evenMax: num?evenMax; 
      } 
     } 
     System.out.println("even sum = " +evenSum); 
     System.out.println("even max = " +evenMax); 
} 

希望這有助於。你的代碼有三個主要問題: -

  1. 每輸入一個偶數,firstNum(如果它是偶數的話)就被加到總和上。即如果第一個數字是4並且循環運行10次並且遇到6個偶數,則與偶數4一起也增加6次。如果你想用它作爲一個特殊的數字並分別得到它的值,那麼你必須在循環之前將它添加到總和中。

  2. 您應該比較每個新的偶數與前一個最大的偶數,並因此設置evenMax的值。您將它們與firstNum進行比較,因此如果第一個數字是2並且最後一個偶數數字大於2,那麼它將被設置爲evenMax的值。將每個偶數與當前最大偶數進行比較,即evenMax的當前值。

  3. 您不檢查第一個數字是否偶數,並將其分配給偶數最大值。所以如果它是999999,它仍然被分配,但它不是。

請檢查它是否正確,如果你覺得它有用,請投票。