0

我正在编写一个程序来计算该数字在 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

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

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

4

3 回答 3

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。

于 2013-02-19T17:48:08.520 回答
1

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

于 2013-02-19T17:47:45.353 回答
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]);

于 2013-02-19T17:52:20.097 回答