可能的类错误?

时间:2014-06-22 21:32:51

标签: java

class Randomagain {
    public static void main(String args[]){
        Scanner tuna = new Scanner(System.in); 
        boom boomObj = new boom();
        System.out.println("~~Calculator~~");
        System.out.print("Enter your 1st number: "); int first_num = tuna.nextInt();
        System.out.print("Enter your 2nd number: "); int second_num = tuna.nextInt();

        System.out.print("What do you want to do? [plus,sub,mult,div]:  "); 
        String choice = tuna.nextLine();
        if (choice == "plus") boomObj.addition(first_num, second_num);
        if (choice == "sub") boomObj.subtraction(first_num, second_num);
        if (choice == "mult") boomObj.multiply(first_num, second_num);
        if (choice == "div") boomObj.division(first_num, second_num); 
        else {System.out.println("Please check the fields again!! ");}
    }
}
繁荣阶级:

public class boom {
    private int sub_final, add_final, multi_final, div_final;
    public void addition(int a, int b){
        add_final = a + b; System.out.println(a+ " + " +b+ " = " +add_final);
    }

    public void subtraction(int a, int b){
        sub_final = a - b; System.out.println(a+ " - " +b+ " = " +sub_final);
    }

    public void multiply(int a, int b){
        multi_final = a * b; System.out.println(a+ " * " +b+ " = " +multi_final);
    }

    public void division(int a, int b){
        div_final = a + b; System.out.println(a+ " / " +b+ " = " +add_final);
    }
}

当我运行它时,在第3个命令中,它就像:

What do you want to do? [plus,sub,mult,div]:  Please check the fields again!! 

我无法输入任何内容作为回复。

2 个答案:

答案 0 :(得分:1)

您需要使用choice方法将equals与文字字符串进行比较,而不是使用==。原因是==检查比较变量是否引用相同的字符串对象,在您的情况下不是。

所以,替换:

                 if (choice == "plus") boomObj.addition(first_num, second_num);
                  if (choice == "sub") boomObj.subtraction(first_num, second_num);
                  if (choice == "mult") boomObj.multiply(first_num, second_num);
                  if (choice == "div") boomObj.division(first_num, second_num); 
                 else {System.out.println("Please check the fields again!! ");

                 if (choice.equals("plus")) boomObj.addition(first_num, second_num);
                  if (choice.equals("sub")) boomObj.subtraction(first_num, second_num);
                  if (choice.equals("mult")) boomObj.multiply(first_num, second_num);
                  if (choice.equals("div")) boomObj.division(first_num, second_num); 
                 else {System.out.println("Please check the fields again!! ");

答案 1 :(得分:1)

tuna.nextLine()会读取InputStream中的所有内容,直到找到换行符(换行符),这是您输入的第二个数字与 Enter key。

将其更改为tuna.next()以使其正常工作。

除此之外,您应该使用String方法比较equals,而不是使用==

//if (choice == "plus")
if (choice.equals("plus")) {
    //...
}

您的代码中的另一个问题是,最后一个else句子仅影响最接近的if语句。您的代码目前是:

if (choice.equals("plus") { }
if (choice.equals("sub") { }
if (choice.equals("mul") { }
if (choice.equals("div") { } else { } //only affects here

这意味着如果您输入的某些文本与"div"不同,则程序将始终执行else语句中的代码。您的代码应更改为:

if (choice.equals("plus") { }
else if (choice.equals("sub") { }
else if (choice.equals("mul") { }
else if (choice.equals("div") { } else { }