Использование вложенных операторов if и else if внутри оператора while

#java #if-statement #while-loop #nested-loops

#java #if-statement #цикл while #вложенные циклы

Вопрос:

У меня возникли проблемы с тем, чтобы моя программа выполняла то, что мне нужно. В коде нет синтаксических ошибок.

Во-первых, я настроил свою программу так, чтобы запрашивать у пользователя имя и фамилию максимум 3 раза, пользователь должен иметь возможность завершить ввод раньше, если захочет.

Есть ли способ, которым я могу поместить System.out.print(«Вы хотите добавить новое имя (Y / N)»); вне оператора if? Поэтому он остановится после того, как я введу свое третье имя или введу 2 имени и наберу N.

Любая помощь будет принята с благодарностью.

 import java.util.Scanner;

public class SOF {


 public static void main(String test[]){




    @SuppressWarnings("resource")
    Scanner scanner = new Scanner (System.in);

    System.out.print("Do you want to add a new name (Y/N)");
    String newname = scanner.next();

    int AddName = 0;

    while (AddName < 3) {


        if (newname.equalsIgnoreCase("y")) 
        {


            System.out.println("Enter first name: ");
            String fname = scanner.next();

            System.out.println("Enter last name: ");
            String lname = scanner.next();

            AddName = AddName   1;

            System.out.print("Do you want to add a new name (Y/N)");
            String newnamee = scanner.next(); //had to add an extra e, since I had two varibles
                                              // with the same time. This might be the issue.
                                              //I'm unsure though



        }

        else if (newname.equalsIgnoreCase("n")) {

            System.out.println("Goodbye");
            AddName = AddName   3;
        }
    }
}
  

}

Комментарии:

1. Используйте то же newname самое, а затем добавьте amp;amp; newname.equalsIgnoreCase("y") в тест while.

Ответ №1:

Вы можете поместить System.out.print("Do you want to add a new name (Y/N)"); в начало цикла while, что-то вроде этого :

 import java.util.Scanner;

public class SOF {
public static void main(String test[]){
@SuppressWarnings("resource")
Scanner scanner = new Scanner (System.in);
int AddName = 0;

while (AddName < 3) {
System.out.print("Do you want to add a new name (Y/N)");
String newname = scanner.next();

    if (newname.equalsIgnoreCase("y")) 
    {
        System.out.println("Enter first name: ");
        String fname = scanner.next();
        System.out.println("Enter last name: ");
        String lname = scanner.next();
        AddName = AddName   1;         

    }

    else if (newname.equalsIgnoreCase("n")) {
        System.out.println("Goodbye");
        AddName = AddName   3;  //alternatively you can use break statement.
    }
   }
  }
 }
  

Комментарии:

1. Вместо AddName = AddName 3; альтернативы вы можете использовать break оператор.

2. Хорошо, я попробую это. Спасибо 🙂

Ответ №2:

Вместо этого используйте do while:

 public static void main(String test[]) {

        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        int AddName = 0;

        do  {

            System.out.print("Do you want to add a new name (Y/N)");
            String newname = scanner.next();

            if (newname.equalsIgnoreCase("y")) {

                System.out.println("Enter first name: ");
                String fname = scanner.next();

                System.out.println("Enter last name: ");
                String lname = scanner.next();

                AddName = AddName   1;

            }

            else if (newname.equalsIgnoreCase("n")) {

                System.out.println("Goodbye");
                AddName = AddName   3;
            }

        } while (AddName < 3);
    }
  

Комментарии:

1. Я попробовал это, и это сработало. Сегодня я узнал кое-что новое, никогда не использовал и не пробовал делать раньше. Вы, ребята, реагируете очень быстро!

Ответ №3:

Ваша вторая переменная никогда не используется:

 String newnamee = scanner.next(); //<-- remove the declaration

newname = scanner.next();//<-- try this instead