java - 为什么它返回错误的字符串?

标签 java string if-statement

我是 Java 新手,所以提前道歉。

我正在制作一种方法,获取学生的考试成绩(int mark)并返回成绩(String Grade)。但有时它会返回错误的成绩。

public String calculateGrade(int mark) {
        String grade = "";
        if (mark < 40) {
            return ("Fail"); 
            }
        else if (mark < 50) {
            return ("3rd");
            }
        else if (mark < 60) {
            return ("2ii");
            }
        else if (mark < 70) {
            return ("2i");
            }
        else if (mark >= 70) {
            return ("1st"); 
            }
        else if (mark < 0) {
            return ("Invalid mark");
            }
        else if (mark > 100) {
            return ("Invalid mark"); 
            }
        return grade;
        }
System.out.println(labExample.calculateGrade(50));

问题是,每当我输入值 -1 时,它都会返回“失败”而不是“无效代码”。超过 100 的情况也是如此,因为它返回“1st”而不是“无效代码”。

尽管我已经说明了如果成绩为 <0 或 >100 则返回什么,但它似乎忽略了它。

任何帮助或指示都会很棒。谢谢。

最佳答案

The problem is that whenever i put in a value -1 it returns as "Fail" instead of "Invalid code.""*

-1< 40 ,所以你的第一个 if的条件为真。这意味着您的 return ("Invalid mark");代码运行,这会终止该方法 - 其余代码均不会执行。 return不仅设置返回值,还继续执行后续语句,它结束方法调用。

还要注意,稍后你有一个逻辑错误,你有一系列else if导致 else if (mark < 70) 的语句接下来是 if (mark >= 70) 。那>= 70永远为真。如果mark< 70 ,上一个if条件为真,而你永远不会到达那里。

正确的方法是按顺序检查,可能(在本例中)从最低到最高,但可能会在前面检查“无效标记”。

其他说明:

  • 您不需要 ()返回值周围,return不是函数/方法。
  • 您不需要 else如果你正在做returnif尸体。
  • 您从未使用过 grade所以没有理由把它放在代码中

所以:

public String calculateGrade(int mark) {
    if (mark < 0 || mark > 100) {
        return "Invalid mark";
    }
    if (mark < 40) {
        return "Fail"; 
    }
    if (mark < 50) {
        return "3rd";
    }
    if (mark < 60) {
        return "2ii";
    }
    if (mark < 70) {
        return "2i";
    }
    return "1st"; 
}

或者分配给grade并在最后返回它,一些人认为这是最佳实践(另一些人认为这是不必要的复杂化):

public String calculateGrade(int mark) {
    String grade; // ** Note I don't do = ""; I want the compiler to warn me if I try to use it without assigning to it

    if (mark < 0 || mark > 100) {
        grade = "Invalid mark";
    }
    else if (mark < 40) {
        grade = "Fail"; 
    }
    else if (mark < 50) {
        grade = "3rd";
    }
    else if (mark < 60) {
        grade = "2ii";
    }
    else if (mark < 70) {
        grade = "2i";
    }
    else {
        grade = "1st"; 
    }
    return grade;
}

注意我需要 else在那里,因为我不 return输入if尸体。

关于java - 为什么它返回错误的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58486523/

相关文章:

java - 使用 Hibernate 和 Spring Data JPA 激活 SQL 语句日志记录

Javascript 撇号解码

java - 如何检查字符串是否为 float ?

java - 为什么完整的 Arraylist 没有通过第二个 for 循环打印出来?

javascript - 如果第一部分为假,如何跳过(JavaScript if 语句)的第二部分

python - 三元可以与 python 中的 return 和 print 一起使用吗?

java - maven 对android项目的支持?

java - 向上滚动不适用于 Listview 中的 SwipeRefreshLayout

java - 我的 SHA1 代码语法错误

java - 使用嵌套 For 循环比较两个字符串数组