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ループ内の残りのを削除します。

また、printステートメントの++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 に答える