2013-03-03 2 views
1

В цикле while я сделал цикл, который не вернул правильный ответ после одного недопустимого ввода и повторил «Ошибка! Неверный тип клиента. Повторите попытку». снова и снова, пока я не закрою программу. Если я вхожу в R или C в качестве входа при первом срабатывании. Когда я ввожу что-нибудь еще, я получаю сообщение об ошибке «Ошибка! Неверный тип клиента. Повторите попытку». как я должен быть, который преднамерен. Однако после того, как ошибка, введя r или c, снова даст мне ошибку, и любой ввод, который я делаю, возвращает сообщение об ошибке снова и снова, пока я не закрою программу. Может кто-нибудь, пожалуйста, скажите мне, что не так в моем коде, что вызывает это?Хотя цикл возвращает ошибки снова и снова после первой ошибки

public static String getValidCustomerType(Scanner sc) 
{ 
    String customerType = (""); 
     System.out.println("Enter the Customer Type"); 
     customerType = sc.next() ; 
     boolean isValid = false; 
     while (isValid == false) 
     { 
     if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C")) 
     { 
     isValid = true; 
     } 
     else 
     { 
      System.out.println("Error! Invalid customer type. Try again "); 
     } 
     sc.nextLine() ; 
     } 
    return customerType ; 
} 
+0

Вам необходимо назначить customerType каждый раз в цикле – Steven

ответ

0

Вы не назначаете customerType внутри цикла while. лучше, но переместите его в начало.

public static String getValidCustomerType(Scanner sc) 
{ 
    String customerType = (""); 

     boolean isValid = false; 
     while (isValid == false) 
     { 
      System.out.println("Enter the Customer Type"); 
      customerType = sc.nextLine() ; 
     if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C")) 
     { 
     isValid = true; 
     } 
     else 
     { 
      System.out.println("Error! Invalid customer type. Try again "); 
     } 
     } 
    return customerType ; 
} 
+0

Это сработало фантастически спасибо :) –

0

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

public static String getValidCustomerType(Scanner sc) 
{ 
    String customerType = (""); 
     System.out.println("Enter the Customer Type"); 
     // move this to while loop 
     //customerType = sc.next() ; 
     boolean isValid = false; 
     while (isValid == false) 
     { 
     // get input here 
     customerType = sc.next() ; 
     if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C")) 
     { 
     isValid = true; 
     } 
     else 
     { 
      System.out.println("Error! Invalid customer type. Try again "); 
     } 
     sc.nextLine() ; 
     } 
    return customerType ; 
} 
0

попробовать это: | (побитовое ИЛИ) не то же самое, как || который представляет собой логический оператор ИЛИ. А во-вторых, вы снова не назначаете customerType - исправление ниже.

while (isValid == false) 
    { 
    if (customerType.equalsIgnoreCase("R")||customerType.equalsIgnoreCase("C")) 
    { 
    isValid = true; 
    } 
    else 
    { 
     System.out.println("Error! Invalid customer type. Try again "); 
    } 
    customerType = sc.nextLine() ; 
    } 
0

Я рекомендую использовать цикл do while с часовым. Это гарантирует, что код выполнен не менее once.

public static String getValidCustomerType(Scanner sc) { 
     String customerType; 
     boolean isValid = false; 

     System.out.println("Enter the Customer Type"); 

     do { 
      customerType = sc.next(); 

      if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C")) { 
       isValid = true; 
      } else { 
       System.out.println("Error! Invalid customer type. Try again "); 
      } 
     } while(!isValid); 

     return customerType ; 
    } 
Смежные вопросы