在按下按键时尝试退出时键入不匹配

时间:2014-11-26 09:35:32

标签: java

我是以下Java程序。

package Arrays;

import java.util.Scanner;

public class Arrays {
    public static void main(String[] args) {
        final int size = 5; // Size of the input Array

        Scanner input = new Scanner(System.in);
        while (!input.equals("q")) {
            System.out.println("Enter the 5 number you want to be stored in an array");

            // get the input of array from the user
            int a[] = new int[size];
            for (int i = 0; i < a.length; i++) {
                a[i] = input.nextInt();
            }

            /* Methods */
            System.out.println("\n");
            displayArray(a); // to display the numbers entered in Array
            System.out.println("\n");
            sumOfArray(a);// To print the sum of Array
            System.out.println("\n");
            productOfArray(a);// to print the product of Array
            System.out.println("\n");
            smallAndLargeOfArray(a);// to print the Max and Min number in Array
            System.out.println("\n");
            averageOfArray(a);// to print the average of Array
            System.out.println("\n");
        }
        input.close();
    }

    private static void displayArray(int arr[]) {
        System.out.print("The numbers you have inserted are ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i < arr.length - 1) {
                System.out.print(", ");
            }
        }

    }

    private static void sumOfArray(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.print("Sum of array is " + sum);

    }

    private static void productOfArray(int[] arr) {
        int prod = 1;
        for (int i = 0; i < arr.length; i++) {
            prod *= arr[i];
        }
        System.out.print("Product of array is " + prod);
    }

    private static void smallAndLargeOfArray(int arr[]) {
        int minimim = Integer.MAX_VALUE;
        int maximum = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            if (minimim > arr[i]) {
                minimim = arr[i];
            }
            if (maximum < arr[i]) {
                maximum = arr[i];
            }
        }
        System.out.print("Minimum and Maximum numbers in array are " + minimim
                + " and " + maximum);

    }

    private static void averageOfArray(int arr[]) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        double avg = sum / 5;
        System.out.print("Average of array is " + avg);

    }

}

这里我试图继续该程序,直到用户输入q,但是当我输入q时,它会抛出以下错误。

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Arrays.Arrays.main(Arrays.java:16)

请让我知道我哪里出错了,我该如何解决这个问题。

由于

5 个答案:

答案 0 :(得分:2)

你应该这样做,因为你正在比较你的Scanner对象

String inputName=""
Scanner input = new Scanner(System.in);
inputName= in.nextLine();
        while (!inputName.equals("q")) {..}

由于扫描仪对象不等于“q”(这是一个字符串),while循环连续运行。 然后扫描仪等待一个整数,但它需要一个字符。因此扫描程序抛出异常(表示输入无法转换为整数值)

<强>读:

答案 1 :(得分:1)

该行抛出异常:

a[i] = input.nextInt();

当您输入'q'时,下一个标记无法转换为int,因此请获取InputMismatchException。您应该使用hasNextInt()方法检查下一个标记是否为int。

此外,您的条件!input.equals("q")没有意义。在这里,检查Scanner对象是否等于字符串“q”。您要做的是检查Scanner对象的下一个标记是否等于字符串“q”:

boolean cont = true;
while (cont) {
    System.out.println("Enter the 5 numbers you want to be stored in an array");

    // get the input of array from the user
    int a[] = new int[size];
    for (int i = 0; i < a.length; i++) {
        if (input.hasNextInt()) {
            a[i] = input.nextInt();
        }
        else {
            String token = input.next();
            if ("q".equals(token)) {
                cont = false;
                break;
            }
            i--; // move back to the last position
        }
    }

    ...
}

答案 2 :(得分:1)

目前,您正在尝试将String类型的对象与Scanner类型的对象进行比较。结果始终为false,您输入while循环并请求nextInt()导致类型不匹配,因为下一个标记为“q”。

你应该使用带有正则表达式的input.findInLine()来查看下一个令牌而不使用它并检查它是否满足你的突破条件。

while(input.hasNextLine() && !input.findInLine("^q$")){
  //...
}

<强>读:

编辑: 编辑使用不使用令牌的findInLine

答案 3 :(得分:1)

在while循环外使用Sysout并在while循环中更改条件。

 System.out.println("Enter the 5 number you want to be stored in an array");
        Scanner input = new Scanner(System.in);
        while (!input.next().equals("q")) {
            System.out.println("Enter the 5 number you want to be stored in an array");

答案 4 :(得分:0)

使用nextInt()只预期int值。如果它不是q

,则将其更改为next()并将值转换为int