Цикл Java запрашивает ввод, пока пользователь не введет что-то приемлемое

#java

Вопрос:

В качестве упражнения я хочу создать всплывающее окно, в котором пользователь вводит строку, чего я хочу достичь:

  1. Если они введут «да», выведите «ДА»
  1. Если они введут «нет», выведите «НЕТ»
  2. Если они вводят что-то другое, повторяйте цикл до тех пор, пока они не введут » да » или «нет», а затем выведите » ДА » или » НЕТ

1 и 2 работают, 3 зацикливаются, но затем ничего не печатают после ввода » да » или «нет».

есть какие-нибудь идеи?

 package harmony.randomstuff;
//imports
import java.text.*;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class RandomStuff {
    public static void main (String[]args) {
       
        //objects
Scanner dakeyboard = new Scanner(System.in);
//************************************************************
String xd = "";

//creates popup window for user to enter something
String x = JOptionPane.showInputDialog("enter (yes\no)");

// this will loop until you enter yes or no then stop looping but nothing prints
//I tried to express the logic statement "if it is not true that x = yes or x = no then loop until it is

if (!(("yes".equals(x))||("no".equals(x)))) {
    do { x = JOptionPane.showInputDialog("please enter (yes\no)");
    } while (!(("yes".equals(x))||("no".equals(x))));
}

// the two loops here work perfectly
else if ("yes".equals(x)){
    xd="YES";
}

else if ("no".equals(x)){
    xd="NO";
}

//************************************************************
System.out.println(xd);
 //************************************************************    

        dakeyboard.close();
    }
    
} 

Ответ №1:

зацикливание неверно, вместо else if этого вы должны просто использовать if сразу после этого комментария // the two loops here work perfectly

 package org.rj.stackoverflow;

import java.text.*;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class RandomStuff {
    public static void main(String[] args) {

        //objects
        Scanner dakeyboard = new Scanner(System.in);
//************************************************************
        String xd = "";

//creates popup window for user to enter something
        String x = JOptionPane.showInputDialog("enter (yes\no)");

// this will loop until you enter yes or no then stop looping but nothing prints
//I tried to express the logic statement "if it is not true that x = yes or x = no then loop until it is

        if (!(("yes".equals(x)) || ("no".equals(x)))) {
            do {
                x = JOptionPane.showInputDialog("please enter (yes\no)");
            } while (!(("yes".equals(x)) || ("no".equals(x))));
        }

// the two loops here work perfectly
        if ("yes".equals(x)) {
            xd = "YES";
        } else if ("no".equals(x)) {
            xd = "NO";
        }

//************************************************************
        System.out.println(xd);
        //************************************************************

        dakeyboard.close();
    }

}
 

если вы хотите улучшить код, сделайте следующее

 String x;
do {
   x = JOptionPane.showInputDialog("please enter (yes\no)");
} while(!x.equals("yes") amp;amp; !x.equals("no"));
System.out.println(x.toUpperCase());
 

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

1. похоже, это был мой цикл while

2.цикл while был в порядке, но после завершения циклов while else if он не выполнялся, так как был частью того же if - else if - else if блока. Так что, разбив это на два отдельных if if else if блока, это сработало. так как второй if - else if больше не зависел от выполнения первого if блока

Ответ №2:

просто вы можете достичь того, чего хотите, с помощью этого

 String x ="";
while  (!("yes".equals(x)||"no".equals(x))) {
    x = JOptionPane.showInputDialog("please enter (yes\no)");
   
}
System.out.println(x.toUpperCase());