2014-02-16 39 views
0

我正在開發一個Java程序。我必須計算file.txt中的總數,但我沒有辦法找到最大和最小的file.txt,我希望你能幫助我。如何查找file.txt的最大和最小數量?

我的代碼是在這裏:

package program; 

import java.io.IOException; 
import java.io.StreamTokenizer; 
import java.io.FileReader; 

public class count 
{ 
    int countnum=0; 

    public count() throws IOException 
    { 
     StreamTokenizer st=new StreamTokenizer(new FileReader("file.txt")); 

     while(st.nextToken() != StreamTokenizer.TT_EOF) {   
      if(st.ttype == StreamTokenizer.TT_NUMBER) { 
       countnum++; 
      } 
     } 

     System.out.println("total numbs are: "+countnum); 
    } 

    public static void main(String[] args) throws IOException { 
     new count(); 
    } 

} 
+0

你只是計算數字,將它們存儲在某個地方並執行你的邏輯。使用SortedSet。首先和最後的數字是你需要的。 – Batty

+0

你的文件的內容是什麼 –

回答

0

這應該工作:

public void count() throws IOException 
{ 

    int countnum = 0; 
    Set set = new TreeSet(); 
    StreamTokenizer st = new StreamTokenizer(new FileReader("file.txt")); 

    while (st.nextToken() != StreamTokenizer.TT_EOF) 
    { 

     if (st.ttype == StreamTokenizer.TT_NUMBER) 
     { 
      set.add(st.nval); 
      countnum++; 
     } 
    } 
    System.out.println("total numbs are: " + countnum); 

    System.out.println("highest is : " + ((SortedSet) set).last() + " Smallest is : " + ((SortedSet) set).first()); 

} 

我用設置排序的輸入,這樣我就不必寫邏輯。 Read Collections in Java。你可能會發現它們在很多地方都很有用。

+0

非常感謝你們你們真的幫我代碼工作 – Cntrs

1

以前的答案中的代碼有效,但在這種情況下使用Set是一種矯枉過正。它會產生將每個數字存儲在集合中的成本。對於非常大的文件,性能將比下面的解決方案明顯更差,這在我看來是非常優雅的。

public void count() throws IOException 
{ 
    int countnum = 0; 
    int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE; 
    StreamTokenizer st = new StreamTokenizer(new FileReader("file.txt")); 

    while(st.nextToken() != StreamTokenizer.TT_EOF) {   
     if(st.ttype == StreamTokenizer.TT_NUMBER) { 
      countnum++; 
      int value = (int) st.nval; 
      if (value < min) 
       min = value; 
      if (value > max) 
       max = value; 
     } 
    } 

    System.out.println("total numbs are: " + countnum); 
    System.out.println("highest is : " + max + ", smallest is : " + min); 
} 
+0

非常感謝你們你們真的幫我代碼工作 – Cntrs

+0

這一個看起來比我的好。用這個 :) – Batty