2014-11-05 71 views
-1

任務是讀取一組正數值&在用戶輸入負值後報告其最大值。延伸到最低限度。 我認爲這個問題是變量max被初始化爲0.之後它只保留在while循環中,所以輸出始終是0. 我不知道如何將最後一個最大值從循環中取出並打印出來。 任何幫助,將不勝感激!查找最大數字 - 初學者Java

import java.util.Scanner; 


    // constants 

    // variables 
    int input; 
    int max = 0; 
    int a = 0; 
    // program code 
    System.out.println("Input the numeber: "); input = scan.nextInt(); 

    if (input < 0) { 
    System.out.println("You did not enter any positive number "); 
    } 
    else { 
    while (input >= 0) { 

     input = a; 
     if (a >= input) { 
     a = max; 
     } 
     else { 
     input = max; 
     } 
     input = scan.nextInt(); 
     } 
    } 
    System.out.println(max); 

    } 

    // todo... 


} 
+0

有很多邏輯錯誤。你應該查看整個代碼,問題不在於幾行,而是全部都是 – Dici 2014-11-05 18:27:27

+0

關於你的代碼有很多話要說。用戶輸入多少個數字?輸入何時停止?爲什麼要關心數字是正面還是負面呢? – 2014-11-05 18:31:49

+0

請格式化好....'System.out.println(「輸入數字:」); input = scan.nextInt();'---把代碼放在sep。行 – Coffee 2014-11-05 18:31:53

回答

3

問題在你的代碼:

  1. 你不分配inputmax任何地方。

  2. input = a; // each time you are assigning a to input so input becomes 0 since a is 0.

  3. if (a >= input) { // this condition will be always true a = max; }

概念很簡單:

步驟1.初始化max至0

步驟2.重複while input >=0

step 3.檢查if input > max然後設置max=input

setp 4. print max。下面

這段代碼給出:

public static void main(String[] args) throws Exception 
    { 
     int input; 
     int max = 0; 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Input the numeber: "); 
     input = scan.nextInt(); 
     if (input < 0) { 
      System.out.println("You did not enter any positive number "); 
     } 
     else { 
      while (input >= 0) { 
       if (max < input) { 
        max = input; 
       } 
       input = scan.nextInt(); 
      } 
     } 
     System.out.println(max); 

    } 
+1

謝謝! 你能告訴我爲什麼在我的代碼中,變量max沒有離開while循環嗎? – drX 2014-11-05 18:39:24

+1

儘管這給出了一個解決方案,但它並沒有解釋答案。你應該添加一個解釋(爲什麼你的作品以及爲什麼OP沒有)。 – 2014-11-05 19:23:47

0

代碼長相一般有點玄乎,可在有一些問題,但基本邏輯/算法的問題是最大應設置你正在尋找的第一個數字不爲零。

這是列表技術中最大值的經典掃描。您希望保持max始終是迄今爲止遇到的最大值的不變量,因此您無法將其設置爲任意值,因爲它可能不在列表中,或者不在列表的成員中。

0

你只是在維護最大的邏輯錯誤。 Rustam的答案就是你要找的,但爲了澄清,你只需要維持的最大值和輸入進來,並且只有當你接受輸入時有一個新的最大值和輸入時才更新最大值,不需要輸入所有。

0

你可以使用:

if (input < 0) { 
       //---- 
    }else { 
      while (input >= 0) { 
       if (max < input) { 
        max = input; 
       } 
       input = scan.nextInt(); 
      } 
    } 
    System.out.println(max); 

在你的代碼中沒有設置值最大!

+0

是的,最大分配不正確。 謝謝! – drX 2014-11-05 19:02:25