2015-06-07 3 views
1

В настоящее время я прохожу через курс Udemy Java и практикую то, что я узнал до сих пор.Повторяющееся сообщение об ошибке внутри цикла while

У меня есть следующая простая программа, которую я планирую использовать, чтобы заставить пользователя ввести свое имя.

import java.util.Scanner; 



public class Adventure { 
    public static final int menuStars = 65; 
    private static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) { 
     String firstName = ""; 
     String lastName = ""; 
     boolean validName = false; 
     while(!validName){ 
      //Entering first name 
      System.out.println("Please enter your first name."); 
      try { 
       firstName = input.nextLine(); 
       if(firstName.length() == 0){ 
        throw new Exception("Please enter a first name of at least 1 character."); 
       }else{ 
        //Entering last name 
        System.out.println("Please enter your last name."); 
        lastName = input.nextLine(); 
        if(lastName.length() == 0){ 
         throw new Exception("Please enter a last name of at least 1 character"); 
        }else{ 
         System.out.println("You have entered " + firstName +" " + lastName); 
        } 

       } 
      } catch (Exception e) { 
       System.out.println(e.getMessage()); 
       continue; 
      } 
      //Used to terminate loop when both first & last names are valid 
      validName = true; 
     } 


    } 
} 

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

Например, если пользователь вводит пустое имя, я хочу, чтобы программа повторяла «Пожалуйста, введите имя не менее 1 символа» и когда пользователь вводит пустую фамилию, чтобы он продолжал повторять «Пожалуйста введите фамилию не менее 1 символа ", пока пользователь не введет действительное имя.

Однако в настоящее время, когда пользователь вводит пустое имя или фамилию, моя программа будет повторяться с самого начала, вместо того чтобы повторять только сообщение об ошибке.

Как я могу заставить программу повторить только сообщение об ошибке?

+0

почему вы используете попытаться/поймать? вы хотите использовать их или просто хотите посмотреть, как они работают? –

+0

Если я правильно понимаю, ваше продолжение приведет вас к началу цикла while, который вы хотите.Как правило, в такой программе подходящим способом было бы повторить вопрос, но я думаю, если вы не хотите этого делать, вы можете вывести вопрос из цикла и использовать пустой шрифт. – mcraen

+0

@SkarosIlias Я прочитал, что цикл catch try должен использоваться, когда у меня есть способ обработки исключения. Как таковой, не должен ли я использовать цикл catch catch, поскольку я планирую повторить вопрос? –

ответ

0

Пробел на самом деле считается персонажем, поэтому проверка (длина == 0) не подходит для ваших целей.

Хотя нижеследующий код является неполным (например: обрабатывает потенциально нежелательный случай firstname = "foo" (см. Функцию .contains()), он выполняет то, что задает исходное сообщение - когда пользователь вводит пустой пробел/фамилия, имя, он не устает повторять: «Пожалуйста, введите имя/фамилию, по крайней мере, 1 символ» до тех пор, пока пользователь не введет правильное имя/фамилии.

import java.util.Scanner; 

public class Adventure { 
    public static final int menuStars = 65; 
    private static Scanner input = new Scanner(System.in); 

    public static void main(String[] args) { 
     String firstName = ""; 
     String lastName = ""; 

     boolean firstNameLegal = false; 
     boolean lastNameLegal = false; 

     // Entering first name 
     while (!firstNameLegal) { 
      System.out.println("Please enter your first name."); 
      firstName = input.nextLine(); 

      if (!firstName.equals(" ")) 
       firstNameLegal = true; 
      else 
       System.out.println("Please enter a first name of at least 1 character."); 
     } 

     // Entering last name 
     while(!lastNameLegal){ 
      System.out.println("Please enter your last name."); 
      lastName = input.nextLine(); 

      if(!lastName.equals(" ")) 
       lastNameLegal = true; 
      else 
       System.out.println("Please enter a last name of at least 1 character."); 
     } 

     System.out.println("You have entered " + firstName +" " + lastName); 
    } 
} 
1

Используйте логическую переменную, которая хранит true, когда «Пожалуйста, введите свое имя». печатается. Проверьте перед печатью этой строки каждый раз, если эта переменная ложна или нет. Кроме того, инициализируйте его до false до цикла. Такая же идея имеет название.

if(!printed) 
{ 
    System.out.println("Please enter your first name."); 
    printed=true; 
} 
1

нету испытания, что, но я предполагаю, что это может быть так, с ПРИМЕРЬТЕ/улова, хотя, это просто не имеет никакого смысла для меня использовать его так, как вы есть на вашем коде

String firstName = ""; 
String lastName = ""; 
System.out.println("Please enter your first name."); 
firstName = input.nextLine(); 
while(firstName.length<1){ 
    System.out.println("Please enter a first name of at least 1 character."); 
firstName = input.nextLine(); 
    } 
lastName=input.nextLine(); 
while(firstName.length<1){ 
    System.out.println("Please enter a last name of at least 1 character."); 
    lastName = input.nextLine(); 
} 
System.out.println("You have entered " + firstName +" " + lastName); 

Редактировать, некоторые основные сведения об исключениях try catch используется, когда что-то неожиданное происходит, и вы пытаетесь найти способ обойти его. например, если в какой-то момент ожидается массив из 10 позиций, и используется меньший массив (скажем, 4 позиции). Тогда это приведет к исключению, которое приведет к завершению работы программы без дополнительной информации.

С помощью try catch вы можете проверить, в чем проблема, и попытаться либо проинформировать пользователя о том, чтобы что-то сделать (если они могут), либо закрыть программу лучше, используя System.exit(), например, и сохранить все работа, которая была сделана до этого момента

Другой пример: если вы попросите 2 цифры сделать дополнение. если пользователь вводит буквы вместо номера, то int sum=numbA+numbB; будет выбрасывать и исключать. Конечно, это можно было бы использовать с помощью if. но даже лучше бы было что-то вроде this

+0

Я читал, что цикл catch try должен использоваться, когда у меня есть способ обработки исключения. Как таковой, не должен ли я использовать цикл catch catch, поскольку я планирую повторить вопрос? Если нет, как я должен использовать try/catch в любом фрагменте кода? –

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