为什么我的代码总是转到else语句?

时间:2012-03-31 22:09:46

标签: java string if-statement

package GC;

import java.util.Scanner;

public class main {
public static void main(String args[]) {
    Scanner input = new Scanner(System.in);
    System.out.println("Calculate exam grade needed(e) or final grade received(f)?");
    String x = input.nextLine();
    if (x == "e"){
        double q1, q2, f, e;
        Scanner inputa = new Scanner(System.in);
        Scanner inputb = new Scanner(System.in);
        Scanner inputc = new Scanner(System.in);

        System.out.print("Quarter 1: ");
        q1 = inputa.nextInt();
        System.out.print("Quarter 2: ");
        q2 = inputb.nextInt();
        System.out.print("Final grade wanted: ");
        f = inputc.nextInt();

        e = 5*(f-0.4*(q1)-0.4*(q2));
        if(e == (int)e){
            System.out.println((int)e);
        }
        else{
            e = 0.01*((int)(e*100));
            System.out.println(e);
        }
    }


    else if (x == "f"){

    }
    else{
        System.out.println("ERROR");
    }



}
}

即使我在开头输入e,也总是转到else语句。从用户输入或使用if参数获取String时,我可能做错了。我错过了什么?

4 个答案:

答案 0 :(得分:3)

if (x == "e"){

您应该将String个对象与equals()进行比较,而不是operator==。您还应该知道equalsIgnoreCase(),它会检查String的相等性,而忽略每个字符的大小写 - 有时可能会有用。

operator==检查身份 - 如果两个对象实际上是同一个对象[引用同一个对象的变量],而equals()正在检查是否相等 - 如果他们的内容相同。

变化

if (x == "e"){

if ("e".equals(x)) {

并对else if (x == "f"){

执行相同的操作

答案 1 :(得分:1)

您需要使用“equals”比较方法。 X是一个字符串,并且没有用于“==”的重载运算符来比较值。

如果您不确定,请务必查看对象的javadoc。

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

if(x.equals("e")){

}

答案 2 :(得分:0)

因为e是双倍的,当你把它转换为int时,你会丢失一些。

答案 3 :(得分:0)

尝试(也许你得到一个空白处:

String x = input.nextLine().toString().trim()

x.equals("e")