在数组中进行完整性检查?

时间:2012-03-29 01:11:37

标签: java

为我的java类做一个相当大的作业。我编写了整个程序,但是我遇到了最后一个问题,需要检查用户输入到数组中以确保它是用户输入的整数,而不是垃圾(a, Z,2.0,@%& @#%* @%^等)如果发生错误,它必须循​​环回来,使输入带有错误信息,直到它们符合要求。

我听说使用try / catch作为解决方案,我也想过可能是一个while循环,但仍然不确定如何去做。有什么提示吗?

import java.util.Scanner;
import java.util.Arrays;

public class Assignment6 {
    public static int getMaxValue(int[] array) {
        int maxValue = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] > maxValue) {
                maxValue = array[i];
            }
        }
        return maxValue;
    }

    public static int getMinValue(int[] array) {
        int minValue = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] < minValue) {
                minValue = array[i];
            }
        }
        return minValue;

    }

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

    public static double Median(int[] array) {
        int Median = array.length / 2;
        if (array.length % 2 == 1) {
            return array[Median];
        } else {
            return (array[Median - 1] + array[Median]) / 2.0;
        }
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter size of array: ");
        int[] array = new int[input.nextInt()];

        for (int i = 0; i < array.length; i++) {
            System.out.print("Enter value #" + (i + 1) + ": ");
            array[i] = input.nextInt();
        }

        System.out.println("\nYour data is:");

        for (int i : array)
            System.out.print(i + "\n");
        System.out.println();

        System.out.println("Average is : " + average(array));

        System.out.println("Smallest value is: " + getMinValue(array));

        System.out.println("Largest value is: " + getMaxValue(array));

        System.out.println("\nYour sorted data is: ");

        Arrays.sort(array);

        for (int i = 0; i < array.length; i++)
            System.out.println(array[i]);

        double Median = Assignment6.Median(array);
        System.out.println("\nThe median is: " + Median);

        int Range = Assignment6.getMaxValue(array) - Assignment6.getMinValue(array);
        System.out.println("\nThe range is: " + Range);

        double midRange = (Assignment6.getMaxValue(array) + Assignment6.getMinValue(array)) / 2.0;
        System.out.println("\nThe Midrange is: " + midRange);
    }
}

2 个答案:

答案 0 :(得分:4)

由于您使用了Scanner.nextInt(),因此无法将非整数输入添加到数组中。此外,您的int[]中不可能存在非整数值。该程序可能无法编译,即使它已经编译,也会抛出运行时异常。


但是,如果用户输入非整数,您的程序将崩溃。它与数组没有任何关系,但我猜这是你的问题的意思。使用Scanner安全读取用户的整数输入的正确方法是:

for (int i = 0; i < array.length; i++) {
    System.out.print("Enter value #" + (i + 1) + ": ");

    while (!input.hasNextInt()) { // <-- 'peeks' at next token
        System.out.println("Please enter an integer!");
        input.next(); // <-- skips over invalid token
    }

    array[i] = input.nextInt();
}

答案 1 :(得分:0)

你也可以使用Integer.parseInt(yourString),如果String不是有效的话,它会抛出一个NumberFormatException

相关问题