Как пропустить приглашение и перейти к следующему, не нарушая и не выходя из всего цикла? Ява


Поэтому я работаю над программой, позволяющей пользователю добавлять учеников в класс, а также управлять их оценками и тем, что нет. Когда пользователь выбирает первый вариант в меню, он должен ввести идентификатор (обязательно), но он может добавить числовой балл и/или буквенный балл. На основе обратной связи в другом посте мне удалось создать строку переменной строки, которая считывает пользовательский ввод, затем проверяет, является ли это "S"/"s" (пропустить или нет) и разбирает значение в double соответственно. Теперь, опираясь на вопрос, как я могу пропустить приглашение и перейти к следующему приглашению, если пользователь решит пропустить добавление баллов? я пытался использовать break; но он выходит из всего цикла . Есть ли способ пропустить вопрос для оценки и перейти к вопросу для оценки букв?

Вывод:

1) Добавить учащихся в класс
2) удалить ученика из класса 3) установить оценки для студента
4) редактировать оценки для студента
5) Показать Отчет Класса
6) выход

1

Пожалуйста введите код: Пожалуйста, введите счет: (введите s, чтобы пропустить)

Любезно введите оценку: (введите s, чтобы пропустить)

Код

// Prompting the user for Score (Numerical Grade)

System.out.println("Kindly input Score:    (Enter s to Skip)"); 
// reading the input into the line variable of string datatype
String line = input.nextLine(); 
// checking if line =="s" or =="S" to skip, otherwise
// the value is parsed into a double
if("s".equals(line) || "S".equals(line))
{
break;  // this exists the loop. How can I just skip this requirement 
        //and go to the next prompt?
}else try
{
       score = Double.parseDouble(line);                
       System.out.println(score);
} catch( NumberFormatException nfe)
{

}
// Prompting the user for Numerical Grade
System.out.println("Kindly input Grade:    (Enter s to Skip)");
String line2 = input.nextLine();
if("s".equals(line2) || "S".equals(line2))
{
       break;  // this exists the loop. How can I just skip this 
       // requirement and go to the next prompt?
}else try
{
     score = Double.parseDouble(line2);
     System.out.println(score);
} catch( NumberFormatException nfe)
{

}
2 2

2 ответа:

Просто удалите break:

if("s".equals(line) || "S".equals(line))
{
  // Don't need anything here.
}else {
  try
  {
       score = Double.parseDouble(line);                
       System.out.println(score);
  } catch( NumberFormatException nfe)
  {
  }
}

Но лучше не иметь пустого true случая (или, скорее, он не нужен):

if (!"s".equals(line) && !"S".equals(line)) {
  try {
    // ...
  } catch (NumberFormatException nfe) {}
}

Вы также можете использовать String.equalsIgnoreCase, чтобы избежать необходимости тестировать "s" и "S".

Используйте ключевое слово continue. break завершит весь цикл, в то время как continue просто пропустит следующую вещь.