我正在开发一个Java程序。我必须计算 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 :(得分: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);
}
答案 1 :(得分: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());
}
我使用Set进行排序输入,这样我就不必编写那个逻辑了。 Read Collections in Java。您可能会发现它们在许多地方都很有用。