我正在编写一个程序来计算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
但频率计数不正确。我不知道我在这里犯的是什么错误。
我也不知道如何将此输出写入另一个文件。我需要改变什么?
答案 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]);