2012-03-29 68 views
1

为我的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

您已经在使用'nextInt',这不是为您执行检查吗? – 2012-03-29 01:13:57

+0

由于您使用'nextInt()',这意味着任何格式错误的输入都会导致引发异常。你应该只是处理它。 – dlev 2012-03-29 01:18:33

回答

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(); 
} 
+0

对不起,我没有让自己清楚。 – 2012-03-29 01:22:57

+0

我已经将它配置为在整数条目中工作,但将其配置为使用数组条目似乎是抛出错误。 – 2012-03-29 01:42:05

+0

@StevenHickey你是什么意思,“它与数组条目”? – paislee 2012-03-29 22:14:24

0

您还可以使用的Integer.parseInt(yourString),它会抛出一个NumberFormatException如果该字符串不是有效的