为我的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);
}
}
答案 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