我的计算器程序不起作用。 String变量的问题

时间:2011-09-12 04:06:07

标签: java string if-statement

我正在创建一个带有两个数字和一个运算符的基本计算器。但我不能让操作员正常工作。如果自动转到其他地方。

import java.util.Scanner;
class apples {
    public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    double first, second, answer;
    String op = "";
    System.out.print("Enter first num: ");
    first = input.nextDouble();
    System.out.print("Enter second num: ");
    second = input.nextDouble();
    System.out.print("Enter operator: ");
    op = input.nextLine();

    if(op.equals("-")){
        answer = first-second;
        System.out.println(answer);
    }else if(op.equals("+")){
        answer = first+second;
        System.out.println(answer);
    }else if(op.equals("*")){
        answer = first*second;
        System.out.println(answer);
    }else if(op.equals("/")){
        answer = first/second;
        System.out.println(answer);
    }else{
        System.out.println("crap");
    }   
}
}

3 个答案:

答案 0 :(得分:3)

永远不要将字符串与==进行比较。而是使用equals(...)或equalsIgnoreCase(...)方法。

这很重要的原因是因为==检查所引用的两个对象是否是同一个,如果stringVariable1引用与stringVariable2相同的对象,你并不在意。相反,你想知道这两个变量是否具有包含相同顺序的相同字符的字符串,以及这些方法的用途,第一个如果你不关心大写,第二个如果你这样做。

所以你的代码看起来更像是:

if (op.equals("-")){
  answer = first-second;
  System.out.println(answer);
} else if (op.equals("+")){
  answer = first + second;
  System.out.println(answer);
}
//... etc...

修改
问题二是处理行结束标记。当您使用Scanner的nextInt(),nextDouble()或next()方法时,如果到达行尾,则必须小心处理行尾令牌,以免在下次调用nextLine时搞砸()。

例如,如果用户输入" 10"然后返回这行代码

second = input.nextDouble();

很好地得到10,但不会"吞下"留下悬挂的行标记的结尾。所以当调用这行代码时:

op = input.nextLine();

op变量将获得行结束标记,用户甚至无法输入" +"操作代码。解决方案是在使用不以" Line()"

结束的扫描方法时,如果到达线路令牌,则要小心吞下线路末端令牌。

所以在nextDouble()之后调用nextLine();.例如,像这样:

  String op = "";
  System.out.print("Enter first num: ");
  first = input.nextDouble();
  input.nextLine(); // *** add this to "swallow" the end of line token ***
  System.out.print("Enter second num: ");
  second = input.nextDouble();
  input.nextLine(); // *** add this to "swallow" the end of line token ***

  System.out.print("Enter operator: ");
  op = input.nextLine();

答案 1 :(得分:2)

Scanner.nextLine()不会像您(或我就此而言)所期望的那样工作。请改用next()

import java.util.Scanner;

class Apples {
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        double first, second, answer;
        String op = "";
        System.out.print("Enter first num: ");
        first = input.nextDouble();
        System.out.print("Enter second num: ");
        second = input.nextDouble();
        System.out.print("Enter operator: ");
        op = input.next();

        if(op.equals("-")){
            answer = first-second;
            System.out.println(answer);
        }else if(op.equals("+")){
           answer = first+second;
           System.out.println(answer);
        }else if(op.equals("*")){
            answer = first*second;
            System.out.println(answer);
        }else if(op.equals("/")){
            answer = first/second;
            System.out.println(answer);
        }else{
            System.out.println("oops");
        }
        }
    }

I / O

Enter first num: 1.2
Enter second num: 2.3
Enter operator: *
2.76
Press any key to continue . . .

答案 2 :(得分:0)

Java不会将字符串与.equals()而不是==进行比较吗?我认为==测试身份,而不是同等价值。