我正在尝试制作一个if语句来捕获程序的用户是否输入除y或n之外的值,以便在程序结束时询问“Continue?(y / n):”。但无论我输入“y”,“n”或无效的值,我都会从控制台收到消息“无效输入再次尝试”。只有当选择不是y或者任何人都不知道为什么它会一直发生而不管我输入什么时,才会发生这种情况?
import java.util.Scanner;
public class ProductApp
{
public static void main(String[] args)
{
//display a welcome message
System.out.println("Welcome to the Product Selector ");
System.out.println();
// perform 1 or more selections
Scanner sc = new Scanner(System.in);
String choice = "y";
while (choice.equalsIgnoreCase("y"))
{
System.out.println("Enter Product Code: ");
String productCode = sc.next(); //read the product code
sc.nextLine() ; //discard any other data entered on the line
//make sure the case the user enters for a product code doesn't matter
productCode = productCode.toLowerCase();
// get the Product object
Product p = ProductDB.getProduct(productCode) ;
// display the output
System.out.println();
if (p != null)
System.out.println(p);
else
System.out.println("No product matches this product code. \n");
System.out.println("Product count: " + Product.getCount() + "\n" );
// see if the user wants to continue
System.out.println("Continue? (y/n): ");
choice = sc.nextLine() ;
System.out.println();
if( !choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n") );
{
System.out.println("Invalid input try again");
continue;
}
}
}
}
当我收到消息“无效输入再次尝试”时,程序会要求输入一次新输入,然后继续进行是否有效。如果它是“y”则再次运行,如果是其他任何东西则关闭,而不是第二次请求有效输入。
答案 0 :(得分:2)
你的病情不正确应该是
if(!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n")){
// choice is not y or n
}
答案 1 :(得分:2)
if( !choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n") );
^^
更改
if( !choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n") );
{
System.out.println("Invalid input try again");
continue;
}
要
if(!(choice.equalsIgnoreCase("y") || choice.equalsIgnoreCase("n")))
{
System.out.println("Invalid input try again");
continue;
}
答案 2 :(得分:1)
choice.equalsIgnoreCase("y") && choice.equalsIgnoreCase("n")
永远不会是真的
因为选择可能是y或n,但不是两者
答案 3 :(得分:1)
如果你想要它直到输入y或n,请将它作为一个while语句。否则它将跳转到大循环并退出,因为大的要求
while (choice.equalsIgnoreCase("y"))
所以,内部循环看起来像这样:
while( !choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n") )
{
System.out.println("Invalid input try again");
//continue; //not needed
}
编辑:另一种方法是将“y”视为“是”,将其他所有视为“n”
// pseudocode
while (!choice.equalsIgnoreCase("n")) {
// do your thing
if (!(choice.equalsIgnoreCase("y") || choice.equalsIgnoreCase("n"))) {
choice = "n"; // so exit
}
}
答案 4 :(得分:0)
我认为您应该将if(!choice.equalsIgnoreCase("y") && !choice.equalsIgnoreCase("n"));
更改为if(!choice.equalsIgnoreCase("y") || !choice.equalsIgnoreCase("n")){
。导致使用&&
检查两个条件都为真,这种情况永远不会发生,因为choice
只能包含一个值。
答案 5 :(得分:0)
检查你的病情。它应该是:
if(!(choice.equalsIgnoreCase("y") || choice.equalsIgnoreCase("n") ))
{
System.out.println("Invalid input try again");
continue;
}
答案 6 :(得分:0)
if( !(choice.equalsIgnoreCase("y") || choice.equalsIgnoreCase("n")) )
{
System.out.println("Invalid input try again");
continue;
}
试试这个。