输入之间的空格不会在数组索引上产生异常吗?

时间:2018-10-21 22:40:57

标签: java user-input

我不确定该问题的标题(如果有人输入了该问题的名称,请告诉我)。我的程序要求用户输入5 int和5 double。然后将这些数字放入数组中,并将其传递给方法以获取平均值。我的问题是我是否用空格分隔用户输入并按Enter(例如5 space 6 ... enter;它使我输入的内容超出了数组索引的允许范围。难道不是给您一个错误吗?如何防止这种情况发生?有关如何编写代码的任何建议也将有所帮助!

这是代码。

import java.util.*;

public class Lab7A_BRC{
 public static void main(String[] args) {
    System.out.println("\t\t Average arrays ");
    Scanner input = new Scanner(System.in);

    //array count varriable
    int n = 5;

    //array declaration
    int [] list1 = new int[n];
    double [] list2 = new double[n];

    System.out.print("Enter 5 integer values. ");
    for(int i = 0; i < n; i++) {
            list1[i]= input.nextInt();


         if(i == (n - 1)){

            System.out.println("\t The average of the 5 integers is "
            + average(list1, n));

            }
        }

    System.out.println("Enter 5 double values. ");
    for (int i = 0; i < n; i++){
         list2[i]= input.nextDouble();

         if(i == (n-1)){
             System.out.println("\t The average of the 5 doubles is "
             + average(list2, n));
         }

        }
    }
    public static int average(int[] array, int n){
        int sum = 0;
        for(int i = 0; i < n; i++){
            int holdNumber = array[i];
            sum += holdNumber;
            }

        int average = sum / n;
        return average;

    }

    public static double average(double[] array, int n){
        double sum = 0;
        for(int i = 0; i < n ; i++){
            double holdNumber = array[i];
            sum += holdNumber;
            }
        double average = sum / n;
        return average;
        }
}

5 个答案:

答案 0 :(得分:0)

我是一个初学者,所以我的回答可能是错误的:),对此感到抱歉。这段代码对我有用。就像提到的@iajrz一样,当尝试使用system.in时,您可以做空格或换行。

答案 1 :(得分:0)

我认为您正在混淆两个不同的概念。

一个是输入,另一个是您的变量。

输入是由外壳程序和扫描程序管理的缓冲区(读取:数据块)。它可以包含任意数量的数据,与您无关。

代码中发生的事情是扫描程序获取缓冲区并解析(读取:解释)缓冲区中的下一个有效值,并将其转换为正确的数据类型-直到“ nth”元素为止。因此,由于您要获取“ n”个元素(由for控制),因此输入缓冲区中可用的数据量无关紧要,因此您始终只能读取有限的数据。

唯一重要的数据量是当没有更多输入可供扫描仪读取时,在这种情况下,扫描仪会要求更多输入。

答案 2 :(得分:0)

原因是您要迭代到开头定义的n号。

for(int i = 0; i < n; i++) {
        list1[i]= input.nextInt();

因此,如果您尝试输入1 1 1 1 1 124124 1241,则将看到平均值为1,因为其余的均被忽略且未添加到列表中。因为它不会比给定的nextInt()多尝试n

答案 3 :(得分:0)

它不会给您带来错误,因为您仅读取for循环中所述的前5个值。

第一件事是您应该将输入逻辑与输出逻辑分离,这样您就可以确定退出for循环时处于第5个数字。

然后,您可以检查是否还有除空白字符串之外的其他内容,如果还有,则可以引发异常以表明它包含太多数字。

我已经调整了整数部分,可以轻松调整double逻辑。

随时询问您是否有任何疑问。

改编的代码:

import java.util.Scanner;

public class Lab7A_BRC {

    public static void main(String[] args) {
        System.out.println("\t\t Average arrays ");
        Scanner input = new Scanner(System.in);

        //array count varriable
        int n = 5;

        //array declaration
        int[] list1 = new int[n];
        double[] list2 = new double[n];

        System.out.print("Enter 5 integer values. ");
        for (int i = 0; i < n; i++) {
            list1[i] = input.nextInt();
        }

        if (!input.nextLine().equals("")) {
            throw new RuntimeException("Too many numbers entered!");
        }

            System.out.println("\t The average of the 5 integers is "
                    + average(list1, n));


        System.out.println("Enter 5 double values. ");
        for (int i = 0; i < n; i++) {
            list2[i] = input.nextDouble();

            if (i == (n - 1)) {
                System.out.println("\t The average of the 5 doubles is "
                        + average(list2, n));
            }

        }
    }

    public static int average(int[] array, int n) {
        int sum = 0;
        for (int i = 0; i < n; i++) {
            int holdNumber = array[i];
            sum += holdNumber;
        }

        int average = sum / n;
        return average;

    }

    public static double average(double[] array, int n) {
        double sum = 0;
        for (int i = 0; i < n; i++) {
            double holdNumber = array[i];
            sum += holdNumber;
        }
        double average = sum / n;
        return average;
    }
}

答案 4 :(得分:0)

因为for循环执行n次迭代,所以您只选择输入的前n个整数。如果您输入的是1 2 3 4 5 6 7 8,它将仅选择1 2 3 4 5(因为您的代码n = 5)。您还可以插入由空格分隔的多个数字,因此输入15 0 00 0010 0的平均值为5