有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

if语句Java,方法从if/else打印两个选项

嗨,这是我为一个项目编写的一些代码,它调用了其他几个方法来打印关于此人的声明。我的问题是它以双精度打印,并且似乎正在运行if/else语句

我怎样才能防止这种情况?如果需要,我可以从终端添加文本。代码如下

 void printPersonDescription(String name, boolean sex, int age) {

    if(sex == true && yearsUntilNextMaturityLevel(age) > 1) {
        println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
        " she has " + yearsUntilNextMaturityLevel(age) + " years left until she is " + 
        nextMaturityLevel(age) + "."); 
    }
    else if(sex == false && yearsUntilNextMaturityLevel(age) > 1) {
        println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
        " he has " + yearsUntilNextMaturityLevel(age) + " years left until he is " + 
        nextMaturityLevel(age) + ".");
    }
    if (sex == true && yearsUntilNextMaturityLevel(age) <= 1) {
        println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
        " she has " + yearsUntilNextMaturityLevel(age) + " year left until she is " + 
        nextMaturityLevel(age) + "."); 
    }
    else {
        println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
        " he has " + yearsUntilNextMaturityLevel(age) + " year left until he is " + 
        nextMaturityLevel(age) + ".");
    }

}

共 (3) 个答案

  1. # 1 楼答案

    注意你的四个案例有多相似。你只是在修改打印行中的一些单词。这四个if/else块可以简化为:

    void printPersonDescription(String name, boolean sex, int age) {
        int years = yearsUntilNextMaturityLevel(age);
        String gender = sex ? "she" : "he";
        String plural = years > 1 ? "s" : "";
        println(name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
        " " + gender + " has " + years + " year" + plural + " left until " + gender + " is " + 
        nextMaturityLevel(age) + "."); 
    }
    

    此外,通过使用String.format(假设成熟度级别是字符串),可以使println更具可读性

    String.format("%s is %s. At %d %s has %d year%s left until %s is %s.", 
            name, getMaturityLevel(age), age, gender, years, plural, gender, 
            nextMaturityLevel(age))
    
  2. # 2 楼答案

     void printPersonDescription(String name, boolean sex, int age) {
    
        if(sex == true && yearsUntilNextMaturityLevel(age) > 1) {
            println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
            " she has " + yearsUntilNextMaturityLevel(age) + " years left until she is " + 
            nextMaturityLevel(age) + "."); 
        }
        else if(sex == false && yearsUntilNextMaturityLevel(age) > 1) {
            println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
            " he has " + yearsUntilNextMaturityLevel(age) + " years left until he is " + 
            nextMaturityLevel(age) + ".");
        }
        else if (sex == true && yearsUntilNextMaturityLevel(age) <= 1) {    
            println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
            " she has " + yearsUntilNextMaturityLevel(age) + " year left until she is " + 
            nextMaturityLevel(age) + "."); 
        }
        else {
            println (name + " is " + getMaturityLevel(age) + ". " + "At " + age + 
            " he has " + yearsUntilNextMaturityLevel(age) + " year left until he is " + 
            nextMaturityLevel(age) + ".");
        }
    
    }
    

    您需要在第三个if之前添加else。否则,最后的else语句将匹配第三个if,因此,else语句意味着

    if(sex != true || yearsUntilNextMaturityLevel(age) > 1)
    
  3. # 3 楼答案

    第三个if条件应该是代码中的else if,以避免重复打印

    而不是:

    if (sex == true && yearsUntilNextMaturityLevel(age) <= 1) {
    

    使用:

    else if (sex && yearsUntilNextMaturityLevel(age) <= 1) {
    

    顺便说一句,你不需要使用if (boolVar == true)你只需要使用if (boolVar)