Java:计算Java数组中的出现次数
任务(不是家庭作业):编写一个程序,读取未指定数量的分数,并确定有多少分数高于或等于平均值,有多少分数低于平均值 问题:我在试图计算输入分数的出现次数时,一直在获取数组索引越界错误。将感谢您对如何改进事件输出的指导Java:计算Java数组中的出现次数,java,Java,任务(不是家庭作业):编写一个程序,读取未指定数量的分数,并确定有多少分数高于或等于平均值,有多少分数低于平均值 问题:我在试图计算输入分数的出现次数时,一直在获取数组索引越界错误。将感谢您对如何改进事件输出的指导 import java.util.Scanner; public class AnalyseScore { public static void main(String[] args) { Scanner input =new Scanner(System
import java.util.Scanner;
public class AnalyseScore {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("Enter the number of students:");
int studentnumber = input.nextInt();
//creat array
int [] scores =new int[studentnumber];
int sum =0;
System.out.println("Enter the student scores:");
for(int i =0; i<scores.length;i++){
scores[i]= input.nextInt();
}
//calculate the sum and the average
double average;
for(int i =0; i<scores.length;i++){
sum +=scores[i];
}
average = sum/studentnumber;
System.out.println("The average is:" + (int)(average*100)/100.0);
int belowavg=0;
int aboveavg=0;
for(int i=0;i<scores.length;i++){
if (scores[i]>average)
aboveavg++;
else
belowavg++;
}
System.out.println(" the number of scores bove the average:"+ aboveavg);
System.out.println("the number of scores below average:" + belowavg);
int [] count= new int[scores.length];
for( int i=0;i<scores.length;i++){
count[scores[i]]++;
System.out.println(scores[i] + "occured" + count[i]);
}
}
}
import java.util.Scanner;
公共类分析核心{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入学生人数:”);
int studentnumber=input.nextInt();
//创建数组
int[]分数=新int[studentnumber];
整数和=0;
System.out.println(“输入学生分数:”);
对于(int i=0;i在最后一步之前,您的代码看起来很好。您试图计算每个分数的出现次数,但这要求count
数组的长度为最大分数(这在空间上效率很低)事实上,你并没有生成<代码>计数>代码,因此你的错误。考虑使用<代码> HashMap <代码>而不是一个数组来计数。这个图中的键是分数,值是发生次数:
HashMap<Integer, Integer> count = new HashMap<>();
for(int i=0;i<scores.length;i++){
if(! count.containsKey(scores[i]) count.put(scores[i], 1); //New score, has been seen once
else count.put(scores[i], count.get(scores[i]) + 1); //Already seen score, inc count.
}
HashMap count=newhashmap();
对于(int i=0;icount的长度等于score的长度。您得到了一个错误,因为最高分数高于score的长度。count[scores[i]+;
让我担心。如果scores[i]=9999999
会发生什么?哪一行生成异常?(@Mshnik-这不是什么大问题。没有人有时间输入100000000个数字。)average=sum/studentnumber
厌倦整数division@TedHopp不是在有9999999个分数的情况下,而是在单个分数的值为9999999的情况下。如果使用Java 8,则可以使用int sum=IntStream.of优化int数组的和(分数)和;谢谢你的修改。事实上,我正在参加一个自学计划,我还没有学会map、Hashmap和treemap的用法。我知道我会有时间到达那里。但是如果不使用map,就无法重新构造代码并仍然获得所需的结果吗output@pumpin26添加了排序和计数方法以避免映射
if (scores.length > 0) {
Arrays.sort(scores);
int count = 1;
int prevscore = scores[0];
for (int i = 1; i <scores.length; ++i) {
if (scores[i] == prevscore) {
++count;
} else {
System.out.println(prevscore + " occured " + count);
count = 1;
prevscore = scores[i];
}
}
System.out.println(prevscore + " occured " + count);
}
HashMap<Integer, Integer> count = new HashMap<>();
for(int i=0;i<scores.length;i++){
if(! count.containsKey(scores[i]) count.put(scores[i], 1); //New score, has been seen once
else count.put(scores[i], count.get(scores[i]) + 1); //Already seen score, inc count.
}