简单的java计算器在if else语句中输出不正确

时间:2016-04-14 23:42:33

标签: java if-statement

不确定我在这里做错了什么,但输出是

输入2个数字 15 25(例如) 选择您是否要加,减,乘或除。

用户选择add。什么都没发生?

import java.util.Scanner;

public class Lab1 {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner input = new Scanner(System.in);

        System.out.println("Enter 2 numbers ");
        int numb1 = input.nextInt();
        int numb2 = input.nextInt();
        System.out.println("Would you like to add, multiply, subtract or divide");
        String add = input.next();
        String multiply = input.next();
        String divide = input.next();
        String subtract = input.next();

        if (input.equals(add)) {

            System.out.println(numb1 + " + " + numb2 + " is: " + (numb1 + numb2));

        }

        else if (input.equals(multiply)) {
            System.out.println(numb1 + " * " + numb2 + " is: " + (numb1 * numb2));
        }

        else if (input.equals(divide)) {
            System.out.println(numb1 + " / " + numb2 + " is: " + (numb1 / numb2));
        }

        else if (input.equals(subtract)) {
            System.out.println(numb1 + " - " + numb2 + " is: " + (numb1 - numb2));
        }

        else {
            System.out.println("Try again");
        }
    }
}

5 个答案:

答案 0 :(得分:1)

你的问题在这里:

String add = input.next();
String multiply = input.next();
String divide = input.next();
String subtract = input.next();

这些行中的每一行都会询问Scanner输入并将其分配给单独的字符串。您可以使用调试器或在上面的块之后添加System.out.println(add);语句来显示此处实际发生的情况。然后你这样做:

if (input.equals(add)) {

您现在正在检查Scanner对象是否等于add对象。由于这些是不同的类型,它们永远不会是平等的。

您应该首先将选项设置为常量:

static final String ADD = "add";

然后你需要得到输入:

String choice = input.nextLine();

然后你可以检查选择是否等于你的一个常数。

if (choice.equals(ADD))

请注意,next()将返回下一个“令牌”,由Scanner中设置的分隔符确定。您可能需要的是nextLine(),它将获得一整行输入。在这种情况下,它可能并不重要,但如果你正在寻找一个完整的输入,它可能会。也就是说,你应该了解are some pitfalls

如何使用枚举

由于评论中提到了这一点,因此以下是使用枚举实现此操作的方法。正如您所看到的,当您需要添加运算符时,这变得非常易于扩展:您不再需要担心修改main函数,而只需添加新运算符及其行为即可。只有当Commands永远不需要携带状态,而且只是行为时,你才会这样做,就像他们在这里一样。这种设置对于必须了解各种令牌的命令行程序特别有用(您可以实现equals或其他方法来允许+Add以及{{1}例如,所有都是等价的。

add

运行时示例:

import java.util.Scanner;

public class Calculator {

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter 2 numbers ");
    int numb1 = input.nextInt();
    int numb2 = input.nextInt();
    System.out.println("What would you like to do to these two numbers? Commands available are:");
    for (Command command : Command.values()) {
      System.out.println(command);
    }
    System.out.println("");
    String operator = input.next();
    for (Command command : Command.values()) {
      if (command.toString().equals(operator)) {
        command.printResult(numb1, numb2);
      }
    }
  }

  public interface CommandInterface {
    public void printResult(int x, int y);
  }

  public enum Command implements CommandInterface {
    ADD {
      public void printResult(int x, int y) {
        System.out.println(x + " + " + y + " is: " + (x + y));
      }
    },
    SUBTRACT {
      public void printResult(int x, int y) {
        System.out.println(x + " + " + y + " is: " + (x + y));
      }
    },
    MULTIPLY {
      public void printResult(int x, int y) {
        System.out.println(x + " + " + y + " is: " + (x + y));
      }
    },
    DIVIDE {
      public void printResult(int x, int y) {
        System.out.println(x + " + " + y + " is: " + (x + y));
      }
    };
  }
}

处理完成,退出代码为0

答案 1 :(得分:0)

你在这里犯了一些错误。

首先,您要从Enter 2 numbers 1 2 What would you like to do to these two numbers? Commands available are: ADD SUBTRACT MULTIPLY DIVIDE ADD 1 + 2 is: 3 获取加,减等的值。相反,为那些创建input常量。

例如:static final String

您还要检查static final String ADD = "Add";Scanner的平等程度。那不是你想要的。当您询问他们想要执行哪些操作时,您可以通过String获得该操作并将其与之前定义的字符串(例如input)进行比较。

如果您确定输入完全匹配,则表示如下:

ADD

当然,您可以切换输入,如:

input.nextLine().equals(ADD);

...

答案 2 :(得分:0)

这是因为这些方面:

String add = input.next();
String multiply = input.next();
String divide = input.next();
String subtract = input.next();

您告诉它等待用户输入四个字符串,但用户只输入了一个字符串。你想要的是等待一个字符串,然后检查字符串以查看用户想要执行的操作。

答案 3 :(得分:0)

有很多方法可以满足您的需求,例如:使用if / else,switch。但到目前为止,我将用你所拥有的东西来做。我想提到的一件事是,如果你在一行中输入多个数字,你总是可以使用for循环,然后将它们转换为整数。

这是解决方案。希望它有所帮助!

import java.util.Scanner;

public class Lab1 {

public static void main(String[] args) {

    @SuppressWarnings("resource")
    Scanner input = new Scanner(System.in);
    double result = 0;
    String add = "add";
    String multiply = "multiply";
    String subtract = "subtract";
    String divide = "divide";

    System.out.println("Enter 2 numbers");

    String str = input.nextLine(); 
    String[] numbers = str.split(" ");

    int[] myNumbers = new int[numbers.length];
    for (int j = 0; j < numbers.length; j++) {
        myNumbers[j] = Integer.parseInt(numbers[j]);
    }

    System.out
            .println("Would you like to add, multiply, subtract or divide");
    String choice = input.nextLine();

    if (choice.equals(add)) {
        for (int i = 0; i < myNumbers.length; i++) {
            result =  myNumbers[0] + myNumbers[myNumbers.length - 1];
        }
        System.out.println("The sum is: " + result);

    }
    else if (choice.equals(multiply)) {
        for (int i = 0; i < myNumbers.length; i++) {
            result = myNumbers[0] * myNumbers[myNumbers.length - 1];
        }
        System.out.println("numb1 *  numb2 is: " + result);

    }

    else if (choice.equals(subtract)) {
        for (int i = 0; i < myNumbers.length; i++) {
            result = myNumbers[0] - myNumbers[myNumbers.length - 1] ;
        }
        System.out.println("numb1 - numb2 is: " + result);

    }

    else if (choice.equals(divide)) {
        for (int i = 0; i < myNumbers.length; i++) {
            result = (double)(myNumbers[0])/(double)myNumbers[myNumbers.length - 1] ;
        }
        System.out.println("numb1 / numb2 is: " + result);

    }

    else {
        System.out.println("Try again");
    }

 }
}

答案 4 :(得分:0)

我无法通过字符串弄明白我在为操作员尝试String choice = input.nextLine();时遇到错误,一旦我删除了静电,它就会消失,但仍然无法正常工作。将其更改为字符串if (choice.equals (add)){然后执行import java.util.Scanner; public class Lab1 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter 2 numbers "); int numb1 = input.nextInt(); int numb2 = input.nextInt(); System.out.println("Select 1 for addition."); System.out.println("Select 2 for subtraction."); System.out.println("Select 3 for division."); System.out.println("Select 4 for multiplication."); int choice = input.nextInt(); if (choice == 1) { System.out.println(numb1 + " + " + numb2 + " is: " + (numb1 + numb2)); } if (choice == 2) { System.out.println(numb1 + " - " + numb2 + " is: " + (numb1 - numb2)); } if (choice == 3) { System.out.println(numb1 + " / " + numb2 + " is: " + (numb1 / numb2)); } if (choice == 4) { System.out.println(numb1 + " * " + numb2 + " is: " + (numb1 * numb2)); } } } 后,它会自动跳到else语句再次尝试。因为我理解,所以我只使用了int。感谢您的帮助。这只是java编程的介绍,我完全迷失了,看起来并不那么好。

new EditUserModel() { UserTranscripts = tr }