我正在制作一个游戏节目,我输入参赛者的数量,他们击中蜂鸣器的速度,击中蜂鸣器的最快和最慢的时间,以及比平均值更快击中蜂鸣器的人数
当我有5位参赛者时,我的计划一切顺利。但如果我输入4名参赛者或其他不到5名的参赛者,那就会弄乱一些事情。当我有4名参赛者时,我的最快时间是0,即使我没有把0作为一个时间,并且击中蜂鸣器比平均速度更快的参赛者的数量也搞砸了,只有一个额外的,因为它投入了0.
如果我没有5名参赛者,如何阻止该程序加0?
import java.util.Scanner;
public class FastestFingers {
public static void main(String[] args) {
//declare varialbes
int contestants;
int [] milisecs = new int [6];
int fastest, slowest, i;
int faster = 0;
double average;
Scanner scanInt = new Scanner (System.in);
//make user enter number of contestants
System.out.println ("Enter # of contestants: ");
contestants = scanInt.nextInt();
//make user enter times
for(i=1;i<=contestants;i++)
{
System.out.println ("Time (ms): ");
milisecs[i] = scanInt.nextInt();
}
//calculate fastest time
fastest = milisecs[1];
for(i=1;i<milisecs.length;i++)
{
if(milisecs[i] < fastest)
{
fastest = milisecs[i];
}
}
System.out.println ("Fastest: " + fastest);
//calculate slowest time
slowest = milisecs[1];
for(i=1;i<milisecs.length;i++)
{
if(milisecs[i] > slowest)
{
slowest = milisecs[i];
}
}
System.out.println ("Slowest: " + slowest);
//tell program how to find average
int total = 0;
for(i=1;i<milisecs.length;i++)
{
total = total + milisecs[i];
}
average = total/contestants;
//find numbers faster than the average
int count = 0;
for(i=1;i<milisecs.length;i++)
{
if(milisecs[i]<average)
{
count++;
}
}
System.out.println ("Faster than average: " + count);
}
}
答案 0 :(得分:2)
您创建一个固定大小为6的int[]
。然后您比较最后5个值以找到最低值。所有int
值都是默认值0.如果只将4个值设置为大于0的值,则第五个值将始终为0,因此也是最低值。
您可以通过将数组的大小设置为参赛者数来解决此问题。
还记得数组从0开始计数而不是1.你的循环应该是:
for(i=0;i<milisecs.length;i++)
等
答案 1 :(得分:1)
问题是你初始化数组有六个元素。
int [] milisecs = new int [6];
默认情况下,所有这些值都将为零。然后在你的循环中你只初始化其中的四个,这意味着两个仍然是零。将您的代码更改为:
System.out.println ("Enter # of contestants: ");
contestants = scanInt.nextInt();
int [] milisecs = new int [contestants];
这将确保您只有与参赛者一样多的时间段。
此外,数组索引从零开始,因此您应该更改
fastest = milisecs[1];
到
fastest = milisecs[0];
在循环中,将变量设置为0而不是1。
答案 2 :(得分:0)
数组索引应从0开始。请注意这一点。您编码读取输入并从索引1开始分配给milisecs
。