#java
Вопрос:
В качестве упражнения я хочу создать всплывающее окно, в котором пользователь вводит строку, чего я хочу достичь:
- Если они введут «да», выведите «ДА»
- Если они введут «нет», выведите «НЕТ»
- Если они вводят что-то другое, повторяйте цикл до тех пор, пока они не введут » да » или «нет», а затем выведите » ДА » или » НЕТ
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());