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

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

Вывод:

1) Добавить учащегося в класс
2) Удалить учащегося из класса 3) Установить оценки для учащегося
4) Изменить оценки для учащегося
5) Показать отчет о классе
6) Выйти

1

Пожалуйста, введите id: Пожалуйста, введите Score: (Введите 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)
{

}

person ab_dev    schedule 24.05.2016    source источник


Ответы (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".

person Andy Turner    schedule 24.05.2016
comment
Закон Деморгана в действии :) - person Michael Markidis; 25.05.2016

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

person StrangeOne101    schedule 24.05.2016
comment
Это неправильно. continue пропускает остальную часть тела цикла, тогда как OP хочет перейти к следующему приглашению, которое также находится в теле цикла. - person Andy Turner; 25.05.2016
comment
Виноват. В данном случае, похоже, ему лучше просто делать if (!"s".equalsIgnoreCase(line)) { //try statement here } - person StrangeOne101; 25.05.2016