当我没有

时间:2018-05-15 14:39:26

标签: java arrays

我正在制作一个游戏节目,我输入参赛者的数量,他们击中蜂鸣器的速度,击中蜂鸣器的最快和最慢的时间,以及比平均值更快击中蜂鸣器的人数

当我有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);
    }
}

3 个答案:

答案 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