【问题标题】:Program still executes when array length is greater than 5当数组长度大于 5 时程序仍然执行
【发布时间】:2018-07-13 05:43:16
【问题描述】:

我正在为课堂做一个小的额外学分作业。基本上,用户输入 5 个数字,然后给出平均值。我有一个 if 语句来检查数组长度是否大于 5,如果是,则关闭程序。

但是,程序似乎以前五个给定数字执行,而不是停止。我不确定我忽略了什么

public static double[] getNumbers() {
    Scanner input = new Scanner(System.in);
    double[] numbers = new double[5];
    System.out.print("Enter integers: ");
    for (int i = 0; i < 5; ++i) {

        numbers[i] = input.nextDouble();

        if (numbers[i] == 999) {
            System.exit(0);

        }
    }
    return numbers;
}

public static double[] getAverage(double[] numbers) {

    double[] total = new double[1];
    double[] average = new double[1];

    for (int i = 0; i < 5; ++i) {
        total[0] = total[0] + numbers[i];

    }

    average[0] = total[0] / numbers.length;
    return average;

}

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    double[] numbers;
    double average = 0;

    while (true) {
        System.out.println("Enter 5 integers, for example: 10 20 50 84 73");
        numbers = getNumbers();
        if (numbers.length > 5) {
            System.exit(0);
        }
        average = numbers[0];
        System.out.println("Average is: " + average);

    }
}

}

【问题讨论】:

  • 你的数组长度永远不能超过5
  • 输入 999 是否要退出接受号码?如果是这样,无论如何,您都无法返回大小为 5 的数组。 System.exit(0) 不是你想做的,我不认为。相反,您可以通过中断来跳出循环;而是在那里声明。代码在编写时真的不会做任何事情。您需要从 main 方法调用 getNumbers() 。你试过运行它了吗?
  • 我的错,我还忘了提到,如果输入的数字是 999,我确实希望它结束​​。我运行了它,它会打印出前五个数字的平均值。我现在看到数组长度永远不会超过 5,因为我将它设置为最大值 5。

标签: java arrays if-statement


【解决方案1】:

数组永远不会大于 5,因此无论用户输入多少数字,程序都不会提前退出。

因为您创建了容量为 5 个元素的数组(并且因为您的 for 循环只运行了 5 次),所以您的数组永远不会超过 5 个元素。

double[] numbers = new double[5];
//...
for (int i = 0; i < 5; ++i) {
    numbers[i] = input.nextDouble();
    //...
}

【讨论】:

    【解决方案2】:

    我已经优化了你的代码。在下面的代码中,您还可以获得总和的平均值。 getNumbers() 获取输入并返回数组 numbers 并在 main 方法上分配 numbers[] 数组。然后你可以检查numbers[]数组的长度,如果超过5,System.exit(0)else,打印平均数

    import java.util.Scanner;
    
    public class GuessAvagereNumber {
        public static void main(String[] args) {
            System.out.println("Enter 5 integers, for example: 10 20 50 84 73");
            double[] numbers = getNumbers();
    
            if(numbers.length>5){
                System.exit(0);
            } else {
                System.out.println("Average is: " + getAverage(numbers));
            }          
        }
        private static double[] getNumbers() {
            Scanner input = new Scanner(System.in);
            double[] numbers = new double[5];
            System.out.print("Enter integers: ");
            for (int i = 0; i < 5; ++i) {
                numbers[i] = input.nextDouble();
                if (numbers[i] == 999) {
                    System.exit(0);
                }
            }
            return numbers;
        }
    
        private static double getAverage(double[] numbers) {
            double doubleKeeper = 0;
            for (int i = 0; i < numbers.length; ++i) {
                doubleKeeper+=numbers[i];
            }
            return doubleKeeper/numbers.length;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      最终 @Hydraxan14 突出显示的内容是正确的。即使输入第 6 个值,它仍然会计算前五个整数的平均值。

      【讨论】:

      • 提问者希望他的程序在超过五个数字时退出,而不是在超过四个数字时退出。如果正好有五个数字,您的程序将退出。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2019-01-26
      相关资源
      最近更新 更多