2015-11-19 2 views
0

Я нахожусь в тупике - я написал try/catch для вспомогательного метода. Цель состоит в том, чтобы поймать любой недопустимый вход (что-либо, что не является «мужским» или «женским» (нет конкретного случая). Если вход недействителен, он уведомит пользователя, а затем попросит еще раз. Если он действителен, .. метод возвращает входTry/Catch Exception не работает, как планировалось

Когда я запускаю программу, она не улавливает недействительные входы Почему это не рабочая

Вот вспомогательный метод:

//Helper method that gathers the string input from user 
public static String getString() { 

    //Create new scanner input 
    Scanner input = new Scanner(System.in); 

    //Declare and initialize variables 
    String wordIn = ""; 
    boolean validIn; 

    //do/while loop for obtaining input and checking validity (try/catch) 
    do { 
     validIn = true; 
     try{ 
      wordIn = input.nextLine(); 

     //End Try 
     } 

     catch(Exception invalidInput) { 
      validIn = false; 
      input = new Scanner(System.in); 
      System.out.print("\nYou have entered an invalid input. Please " 
        + "enter either \"Male\" or \"Female\" ONLY for this " 
        + "selection. The selection is not case sensitive." 
        + "\n\nPlease enter your selection: "); 

     //End Catch  
     } 

    //While input is valid, return the input  
    } while (!validIn); 
    return wordIn; 

//End helper 
} 

Вот код из теста:

//Obtain user input and print output 
String passGender = getString(); 
System.out.println("\n" + titanic.getSurvivedPassengersGender(passGender) 
         + " " + passGender.toLowerCase() + " passengers survived the " 
         + "sinking of the Titanic."); 

Кажется, что у меня нет условного набора права ... Я не могу найти, где я ошибся. Я все еще новичок в этом, поэтому я уверен, что это простая ошибка. Любая помощь приветствуется. Спасибо, ребята!

+0

После 'wordIn = input.nextLine();', вам нужно проверить его значение. Если это недопустимое значение, вам нужно выбросить исключение, которое будет уловлено в catch. – Atri

+0

Кстати, почему вы хотите выбросить исключение, вместо этого вы можете просто иметь условие. Если строка ввода не является «мужской» или «женской», то вы можете выполнить код, который у вас есть в разделе «catch» – Atri

+0

. Да. Я теперь сертифицированный идиот ... Это был один длинный день. Я не могу поверить, что я упустил тот факт, что я не установил условия для того, что действительно. Что за день! Извините за то, что тратили свое время, спасибо, ребята! – StevenC

ответ

3

0 Вы не выбрали условий для того, чтобы вы хотите. Вы не установили никаких условий для включения события ввода, который не является «мужским» или «женским». Ваш код должен быть:

//Helper method that gathers the string input from user 
public static String getString() { 

//Create new scanner input 
Scanner input = new Scanner(System.in); 

//Declare and initialize variables 
String wordIn = ""; 
boolean validIn; 

//do/while loop for obtaining input and checking validity (try/catch) 
do { 
    validIn = true; 
    try{ 
     wordIn = input.nextLine(); 
     if(!(wordIn.equalsIgnoreCase("male") || wordIn.equalsIgnoreCase("female"))) 
      throw new Exception(); 
    //End Try 
    } 

    catch(Exception invalidInput) { 
     validIn = false; 
     input = new Scanner(System.in); 
     System.out.print("\nYou have entered an invalid input. Please " 
       + "enter either \"Male\" or \"Female\" ONLY for this " 
       + "selection. The selection is not case sensitive." 
       + "\n\nPlease enter your selection: "); 

    //End Catch  
    } 

//While input is valid, return the input  
} while (!validIn); 
return wordIn; 
//End helper 
} 

EDIT Кроме того, как @ashutosh сказал, вы не должны бросить исключение, вы можете просто использовать условие:

wordIn = input.nextLine(); 
if(!(wordIn.equalsIgnoreCase("male") || wordIn.equalsIgnoreCase("female")) 
    System.out.print("\nYou have entered an invalid input. Please " 
       + "enter either \"Male\" or \"Female\" ONLY for this " 
       + "selection. The selection is not case sensitive." 
       + "\n\nPlease enter your selection: "); 
+1

if (! (WordIn.equalsIgnoreCase («male») || wordIn.equalsIgnoreCase («female»))), потому что равенство строк не работает с = или! = – Shobit

+0

Не знаю, как на земле я пропустил это - другое чем тот факт, что я бегу от дыма. Теперь я чувствую себя идиотом. Большое спасибо за то, что позволил мне тратить время! – StevenC

+0

это происходит со всеми нами :) – 789

1

Или (как многие сказал в комментариях), вам лучше использовать условия. Что-то вроде:

wordIn = input.next(); 

while(!(wordIn.toLowerCase().equals("male") || wordIn.toLowerCase().equals("female"))){ 

System.out.println("\nYou have entered an invalid input. Please " 
       + "enter either \"Male\" or \"Female\" ONLY for this " 
       + "selection. The selection is not case sensitive." 
       + "\n\nPlease enter your selection: "); 
wordIn = input.next(); 

} 

Это будет продолжаться до тех пор, пока действительная строка не будет введена без необходимости попытки улова.

+0

Я понимаю и согласен. Единственная причина, по которой я использую try/catch, - это упражнение, которое преподавалось на протяжении всего курса, который я принимаю. Я собирался просто держать его простым и идти без try/catch, но нужно было включить еще несколько исключений, чтобы показать полное понимание. Спасибо за ваши отзывы. – StevenC