程序计算txt文件中的数字频率,并将结果o / p另一个txt文件?

时间:2013-02-19 17:42:31

标签: java file-io count

我正在编写一个程序来计算twxt文件中出现数字的次数。文本的输入在运行时给出。输入存储在文本文件中,现在我必须计算频率并将结果输出到另一个文本文件中。

import java.io.File;
import java.util.Formatter;
import java.util.Scanner;
public class StudentPoll
{

private Scanner x;
int[] frequency = new int[5];
int count =0;
 public void openFile(){
    try{
        x = new Scanner(new File("numbers.txt"));
    }
    catch(Exception e){
        System.out.printf("No File found");
    }
    }
  public void readFile(){
    while(x.hasNext()){
       int a= x.nextInt(); 
           if(a==1){
               frequency[0]=0;
            ++frequency[0];
            break;
        }
       else if (a== 2){
                       frequency[1]=0;
                ++frequency[1];
                break;
       }
       else if( a==3){
                frequency[2]=0;
                ++frequency[2];
                break;
       }
       else if (a==4){
                frequency[3]=0;
                ++frequency[3];
                break;
       }
       else if (a== 5){
           frequency[4]=0;
               ++frequency [4];
               break;

       }

       }     


          System.out.printf("%s%10s\n","Rating","Frequency");
          System.out.printf("%s%10s\n","1",++frequency[0]); 
          System.out.printf("%s%10s\n","2",++frequency[1]); 
          System.out.printf("%s%10s\n","3",++frequency[2]); 
          System.out.printf("%s%10s\n","4",++frequency[3]); 
          System.out.printf("%s%10s\n","5",++frequency[4]); 



    }
}


public void closeFile(){
    x.close();
}

我应该得到输出:

Rating  Frequency
1         1
2         2
3         1
4         1
5         1

但频率计数不正确。我不知道我在这里犯的是什么错误。

我也不知道如何将此输出写入另一个文件。我需要改变什么?

3 个答案:

答案 0 :(得分:2)

您需要从循环的nextInt()部分开始初始化数组。否则,每次找到新号码时,都会将计数重置为零。

变化:

public void readFile(){
    while(x.hasNext()){
       int a= x.nextInt(); 
           if(a==1){
               frequency[0]=0;
            ++frequency[0];
            break;
        }

为:

public void readFile(){
    while(x.hasNext()){
               frequency[0]=0;
               frequency[1]=0;
               // ... etc etc
       int a= x.nextInt(); 
           if(a==1){
            ++frequency[0];
            break;
        }

并从循环中移除frequency[x]=0的其余部分。

此外,打印语句中的++ frequency [x]调用不应该存在。每次打印列表时都不希望增加。循环遍历数组也更有意义,而不是每个数组都有printf。

答案 1 :(得分:1)

您每次都使用frequency[xxx]=0;重置计数。只需删除所有这些语句,因为数组元素将自动使用默认值进行初始化,int为0。

答案 2 :(得分:0)

frequency[0]=0;
++frequency[0];

每次匹配时都会重置频率,打印结果时也会增加频率。

int[] frequency = new int[5]替换为 int[] frequency = [0,0,0,0,0]System.out.printf("%s%10s\n","1",++frequency[0]); System.out.printf("%s%10s\n","1",frequency[0]);