【问题标题】:How do I make a if-else statement with the string argument ( that is a string input from the user)? [duplicate]如何使用字符串参数(即用户输入的字符串)创建 if-else 语句? [复制]
【发布时间】:2015-01-22 15:05:01
【问题描述】:

我正在编写一个程序,要求用户输入他的姓名、地址和电话号码。输入数据后,程序将打印数据并要求用户输入“是”或“否”来验证数据。应重复此过程,直到用户满意并回答“是”。

现在,在我的情况下,我可能以不恰当的方式在 while 循环中放置了 if-else 语句。这就是为什么它没有像预期的那样工作。 我该如何解决这个问题?

我也只尝试过要求输入用户名的提示。 但如果我想以类似的方式添加更多不同问题的提示,那我该怎么做呢?

代码:

package userinfo;    
import java.util.Scanner;

public class UserInfo {

    public static void main(String[] args) {    
        String name;
        String yes = "YES";
        String no = "NO";    
        Scanner userInput = new Scanner(System.in);

        System.out.println("Enter your name:");
        name = userInput.next();
        System.out.println("Please varify your name by typing YES or NO");

        while (true) {
            String input = userInput.next();
            if (input == yes) {
                System.out.println("Your name is: " + name);
            }
            if (input == no) {
                System.out.println("Enter your name again");

            } else {
                System.out.println("Invalid input! Enter value again:");
                break;
            }    
        }    
    }    
}

【问题讨论】:

  • 首先,把==改成.equals,程序员看到会哭(我写这篇评论的时候哭了)。
  • 第二,使用equalsIgnoreCase。您不希望在输入是/否响应时强制用户使用特定的字母大小写。

标签: java loops if-statement while-loop do-while


【解决方案1】:

你应该这样使用它:

if (input.equals(yes)) {
  System.out.println("Your name is: " + name);
}
else if (input.equals(no)) {
 System.out.println("Enter your name again");
}

因为声明:

input==yes;

只检查引用是否相等

要从用户那里输入更多值,您可以这样做:

    System.out.println("Enter your name:");     //This you already did
    name = userInput.next
    System.out.println("Enter your surname:");
    String surname = userInput.next();

完整代码:(要求多提示)

package userinfo;

import java.util.Scanner;

public class UserInfo {

public static void main(String[] args) {

    String name;
    int teleNum;
    String inputTeleNum;
    String yes = "YES";
    String no = "NO";

    Scanner userInput = new Scanner(System.in);

    while (true) {

        System.out.println("Enter your name:");
        name = userInput.next();

        System.out.println("Please varify your name by typing YES or NO");

        String input = userInput.next();

        if (input.equals(yes)) {
            System.out.println("Your name is: " + name);
        } else if (input.equals(no)) {
            System.out.println("Enter your name again");

        }

        while (true) {

            System.out.println("Enter your telephone number:");
            teleNum = userInput.nextInt();

            System.out.println("Please varify your telephone number by typing YES or NO");

            inputTeleNum = userInput.next();

            if (inputTeleNum.equals(yes)) {
                System.out.println("Your telephone num is: " + teleNum);
            } else if (inputTeleNum.equals(no)) {
                System.out.println("Enter your tele number again: ");

            }

        }

    }

}

}

【讨论】:

  • 我建议交换参数/对象,所以它看起来像:yes.equals(input)。我认为Scanner 永远不会返回 null,但是当我将用户输入的数据与常量进行比较时,我总是将常量放在首位以避免 NPE。
  • 这不是 OP 所要求的......他想知道在 while 循环中添加另一个问题
  • @Craig 是的,你是对的,但这些只是非正式的编码约定,每个人都遵循不同的方式:)
  • @Ascalonian 我认为我们不应该通过编写确切的代码来喂用户,这就是为什么没有编写完整的代码,否则他将无法自己学习做事,而且他要求的代码与他已经编写的代码几乎相似:)
  • @SarthakMittal 但是,不编写完整的代码来帮助 OP 自己学习与发布并不能真正回答问题的答案是有区别的。
【解决方案2】:

break 语句应该放在里面

if(input.equals(yes)) 

不在else{}

【讨论】:

    【解决方案3】:

    从 JDK 7 开始可以use a String in a switch statement:

    public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
         String typeOfDay;
         switch (dayOfWeekArg) {
             case "Monday":
                 typeOfDay = "Start of work week";
                 break;
             case "Tuesday":
             case "Wednesday":
             case "Thursday":
                 typeOfDay = "Midweek";
                 break;
             case "Friday":
                 typeOfDay = "End of work week";
                 break;
             case "Saturday":
             case "Sunday":
                 typeOfDay = "Weekend";
                 break;
             default:
                 throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
         }
         return typeOfDay;
    }
    

    也许这适用于您的情况。不过,您放弃了#equalsIgnoreCase() 的选项。

    【讨论】:

    • 如果他们遵循这一点,交换机可以只在字符串上执行toUpperCase() 并使每个大小写都大写。
    • @Ascalonian 是的,这也是我的解决方案。
    【解决方案4】:

    要比较字符串,请使用equals()equalsIgnoreCase() 方法。这将解决您的问题。

    【讨论】:

    • 这不是 OP 的问题。
    • 我也会添加 'trim()'
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多