2017-03-31 92 views
1

我試圖獲取用戶輸入的某個文本文件中的最大值。我也把它分成不同的方法。繼承人是我到目前爲止有:在java中輸入文本文件中查找最大值

public static void FindMax(String file)throws IOException{ 
int maximum = 0; 
Scanner fileScanner = new Scanner(new File(file)); { 
      int big = fileScanner.nextInt(); 
      while (fileScanner.hasNextInt()) { 
       int num = fileScanner.nextInt(); 
       if(num > big) { 
        maximum++; 
        System.out.println(num);; 
       } 
      } 
    } 
} 
public static void main(String[] args)throws IOException{ 

    Scanner keyboard = new Scanner(System.in); 
    String file;            

     System.out.print("Enter file: ");     
     file = keyboard.nextLine();        

     FindMax(file); 

} 

輸出打印文本文件中的所有內容,除了第一個值,而不是打印最大。例如,如果文本文件是:

1 
2 
3 
4 
5 

它只打印2,3,4和5,我不知道我why.How可以得到最大值? Id感謝任何幫助/建議。提前致謝。

編輯:你們所有人都在說類似的解決方案,但是當我嘗試它們時,它只是打印相同的輸出。我很困惑。

+1

有在你的代碼中的邏輯錯誤。你想要做的是從文本和文件中讀取一個數字,並比較它是否大於以前的最大數字。如果是,請更新最大值,然後檢查下一個數字。在讀完整個文件後,你應該打印最大變量的值 – amyn

回答

0
import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 

public class FindMax { 
    public static void findMax(String file) throws IOException { 
     Scanner fileScanner = new Scanner(new File(file)); 
     int max = fileScanner.nextInt(); 
     while (fileScanner.hasNextInt()) { 
      int num = fileScanner.nextInt(); 
      if (num > max) { 
       max=num; 
      } 
     } 
     System.out.println(max); 
     fileScanner.close(); 
    } 

    public static void main(String[] args) throws IOException { 

     Scanner keyboard = new Scanner(System.in); 
     String file; 

     System.out.print("Enter file: "); 
     file = keyboard.nextLine(); 

     findMax(file); 
     keyboard.close(); 
    } 
} 

我修正了代碼中的邏輯錯誤。我不確定爲什麼你定義了最大變量。它在代碼中並沒有真正用於任何有意義的方式。您可能需要考慮將方法的返回類型更改爲「int」並返回找到的最大值。

此外,方法名必須以小寫字母開始: http://www.javatpoint.com/java-naming-conventions

你也應該總是正確關閉您的資源: How to Correctly Close Resources

+0

我完全理解這個邏輯,但是當我嘗試它時,它不打印最大值,而是打印文件的內容。發生什麼事? :( – qqq

+0

這是因爲你(和我!)在循環中使用了println,我修復了我的代碼,只打印了最終的最大值,我以爲你想顯示每個值直到它達到最大值,顯然你只是對最大值感興趣,所以println(或者return語句)應該在代碼的最後。 – jrook

+0

:O是的,就是這樣!謝謝! – qqq

0

只要你得到大於bignum那麼你應該用num來更新big。像這樣 -

while (fileScanner.hasNextInt()) { 
    int num = fileScanner.nextInt(); 
    if(num > big) { 
     big = num; 
    } 
} 

然後完成循環後,您將獲得最大數量。只需打印big -

System.out.println(big); 
0

雖然代碼中有很多錯誤,我認爲你要求的問題是它打印多個數字的原因。

只需將System.out.println(num);這一行放在while循環之外即可。並修復其他錯誤,使其工作。

1

您的代碼實際上並未找到最大值,它將輸出的每個數字大於它讀取的第一個數字。請注意,您從未將big指定爲新值。此外,maximum純粹跟蹤的數字大於big(文件中的第一個數字)。

這應做到:

while (fileScanner.hasNextInt()) { 
    int num = fileScanner.nextInt(); 
    if (num > big) 
     big = num; 
} 
0

你想要做的是內部while循環:

if(num > big) { 
    big = num;   
} 

然後,當你用while循環,你只是打印大完成:
的System.out .println(大);
你不需要這個最大值,因爲你沒有使用它的任何東西,但如果你應該首先修復語法錯誤(錯誤放置和丟失括號),或者你沒有正確複製代碼。