2014-02-16 40 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