对用户输入的字符串使用do-while循环



我目前正在为我的Java类处理一个问题,我正在执行do while循环,当while条件与用户输入的String有关时,我遇到了问题。代码会编译,但无论我输入什么,它都会使while条件失败,并再次执行循环。这甚至发生在我硬编码单位的值时。

我试着在网上查找解决方案,但我能找到的每个例子都使用用户输入的int值,而不是字符串


public class unit {
public static void main (String[] args) {
String prompt = "Please enter your preferred unit of mass (kg, lb, g or oz): ";
System.out.println(preferredUnit(prompt));
}

public static String preferredUnit(String prompt) {
Scanner sc = new Scanner(System.in);
String unit = "";

do{
if (!unit.equals("")) {
System.out.println("Sorry but " + unit + " is not a valid unit type");
}
System.out.println(prompt);
unit = sc.nextLine();

}  while(!unit.equals("kg") || !unit.equals("lb") || !unit.equals("g") || !unit.equals("oz") );

return "Unit of mass: " + unit; 
}
} 
!=A || !=B

不是你想要的。如果我输入A,它不是B,所以它失败了。如果我输入B,它就不是A,所以它失败了。相反,您正在寻找!=A && !=B

例如

while(!unit.equals("kg") || !unit.equals("lb") || !unit.equals("g") || !unit.equals("oz"))

应该是

while(!unit.equals("kg") && !unit.equals("lb") && !unit.equals("g") && !unit.equals("oz"))

两种可能的解决方案。

单向:

public static void main (String[] args) {
String prompt = "Please enter your preferred unit of mass (kg, lb, g or oz): ";
System.out.println(preferredUnit(prompt));
}

public static String preferredUnit(String prompt) {
Scanner sc = new Scanner(System.in);
String unit = "";

do{
if (!unit.equals("")) {
System.out.println("Sorry but " + unit + " is not a valid unit type");
}
System.out.println(prompt);
unit = sc.nextLine();

}  while(!unit.equals("kg") && !unit.equals("lb") && !unit.equals("g") && !unit.equals("oz") );

return "Unit of mass: " + unit; 
}

第二种方式:

public static void main (String[] args) {
String prompt = "Please enter your preferred unit of mass (kg, lb, g or oz): ";
System.out.println(preferredUnit(prompt));
}

public static String preferredUnit(String prompt) {
Scanner sc = new Scanner(System.in);
String unit = "";

do{
if (!unit.equals("")) {
System.out.println("Sorry but " + unit + " is not a valid unit type");
}
System.out.println(prompt);
unit = sc.nextLine();

}  while(!(unit.equals("kg") || unit.equals("lb") || unit.equals("g") || unit.equals("oz")) );

return "Unit of mass: " + unit; 
}

do-while循环表示:do something while a condition is true。您的情况是:

!unit.equals("kg") || !unit.equals("lb") || !unit.equals("g") || !unit.equals("oz")

并且必须是CCD_ 4才能退出CCD_
如果您输入kg,则第一个条件(!unit.equals("kg")(是false,这正是您想要的,但不幸的是,由于下一个条件(!unit.equals("lb")(是true,并且它在OR(||(中,所以无论您的输入是什么,您都将保留在do-while循环中
您需要使用AND(&&(:更改条件

!unit.equals("kg") && !unit.equals("lb") && !unit.equals("g") && !unit.equals("oz")

最新更新