2012-03-29 3 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', разве это не проверка? –

+0

Поскольку вы используете 'nextInt()', это означает, что любой неверный ввод приведет к генерированию исключения. Вероятно, вы должны просто справиться с этим. – dlev

ответ

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

Извините, я недостаточно прояснился. –

+0

Я настроил его для работы в целочисленной записи, но настройка его для работы с записью массива, похоже, вызывает ошибки. –

+0

@StevenHickey, что вы имеете в виду, «для работы с массивом»? – paislee

0

Вы также можете использовать Integer.parseInt (yourString), и он будет бросать NumberFormatException, если строка не является допустимым

Смежные вопросы