0

Hi this is some code I've constructed for a project which calls several other methods to print a statement about the person. My problem is its printing in double and appears to be running through both if/else statements.

How can I prevent this? if needed I can add the text from my terminal. Code below;

 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) + ".");
    }

}
4

3 回答 3

4

请注意您的四个案例有多相似。您只是在打印的行中更改了一些单词。这四个 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) + "."); 
}

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

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))
于 2013-09-25T07:47:04.967 回答
2

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

代替:

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

利用:

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

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

于 2013-09-25T07:39:39.780 回答
0
 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) + ".");
    }

}

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

if(sex != true || yearsUntilNextMaturityLevel(age) > 1)
于 2013-09-25T07:57:17.113 回答