2014-12-10 3 views
1

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

import java.util.Scanner; 
import java.util.InputMismatchException; 

public class ArraySwap 
{ 
    static int h; 
    static Scanner data = new Scanner(System.in); 
    static int[] list = new int[10]; 
    public static void main(String[] args)throws InputMismatchException 
    { 
     System.out.println("Please enter 10 numbers: "); 
     for(h = 0; h < list.length; h++) 
     { 
     try 
      { 
       list[h] = data.nextInt(); 
      } 
     catch(InputMismatchException h) 
      { 
       System.out.println("Please re-enter 10 numbers as an exception " 
        + h.toString()); 
       continue; 
      } 
     } 
     swap(); 
    } 
    public static void printArray(int[] list) 
    { 
     int counter; 
     for(counter = 0; counter < list.length; counter++) 
      System.out.print(list[counter] + " "); 
    } 
    public static int smallestIndex(int[] list) 
    { 
     int length1 = list.length; 
     int counter; 
     int minIndex = 0; 

     for (counter = 1; counter < length1; counter++) 
      if (list[minIndex] > list[counter]) 
       minIndex = counter; 
     return minIndex; 
    } 
    public static int largestIndex(int[] list) 
    { 
     int length2 = list.length; 
     int counter; 
     int maxIndex = 0; 

     for (counter = 1; counter < length2; counter++) 
      if (list[maxIndex] < list[counter]) 
       maxIndex = counter; 
     return maxIndex; 
    } 
    public static void swap() 
    { 
     System.out.print("List of elements: "); 
     printArray(list); 
     System.out.println(); 

     int min_index = smallestIndex(list); 
     int max_index = largestIndex(list); 
     int min_num = list[min_index]; 

     System.out.println("Largest element in list is: " 
       + list[max_index]); 

     System.out.println("Smallest element in list is: " 
       + list[min_index]); 

     min_num = list[min_index]; 
     list[min_index] = list[max_index]; 
     list[max_index] = min_num; 

     System.out.print("Revised list of elements: "); 
     printArray(list); 
     System.out.println(); 
    } 
} 
+0

Очень неясно, что вы просите. не могли бы вы быть более конкретными? –

+0

Привет, Kick, я прошу создать исключение в моей основной программе, тогда оно будет продолжаться после того, как оно отобразит исключение InputMismatchException. – Hervie

+0

что будет после этого? –

ответ

1

Вы уже делаете обработку исключений на целых входов:

try 
     { 
      list[h] = data.nextInt(); 
     } 
    catch(InputMismatchException h) 
     { 
      System.out.println("Please re-enter 10 numbers as an exception " 
       + h.toString()); 
      continue; 
     } 
    } 

Ваш вопрос в том, что в вашем блоке поймать, вы назвали ваш объект InputMismatchException как ч. Это также ваша переменная счетчика циклов. Измените это.

catch(InputMismatchException ex) 
    { 
     System.out.println("Please re-enter 10 numbers as an exception " 
      + ex.toString()); 
     continue; 
    } 

Кроме того, ваш второй вопрос о том, что оператор печати в вашем блоке улова ведется автоматически принимается в качестве входных данных сканера для следующего цикла. Таким образом, программа не позволяет вводить больше чисел после ввода строки ошибки. Что вам нужно сделать, так это сначала использовать data.next(), чтобы использовать ваше сообщение об ошибке.

catch (InputMismatchException ex) { 
       System.out.print("Please re-enter 10 numbers as an exception " 
       + ex.toString()); 
       data.next(); 

      } 
+0

Большое вам спасибо за ответ Aparna Sridhar. Проблема в том, что я запускаю программу, выход которой ниже. – Hervie

+0

Пожалуйста, введите 10 номеров: е Повторно введите номер входа как исключение: java.util.InputMismatchException Повторно введите номер входа как исключение: java.util.InputMismatchException Re -enter введите номер в качестве исключения: java.util.InputMismatchException Повторно введите номер входа в качестве исключения: java.util.InputMismatchException Повторно введите номер ввода в качестве исключения: java.util.InputMismatchException Список элементов: 1 2 3 4 5 0 0 0 0 0 Наибольший элемент в списке: 5 Наименьший элемент в списке: 0 Пересмотренный список элементов: 1 2 3 4 0 5 0 0 0 0 – Hervie

+0

Да, так происходит, потому что ошибка, которую вы распечатываете в своем блоке catch, берется как вход для вашего сканера в следующей итерации цикла for. Поскольку это строка, вы снова получаете ту же проблему. Использование data.next() будет потреблять эту ошибку, а затем вы можете вернуться к выполнению целочисленных входов в следующей итерации. Если вы хотите исправить существующий вход, попросите ввести снова в свой блок catch, используя список [h] = data.nextInt(); – aparna

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