整数输入Java上的字符串sentinel

时间:2015-06-02 21:54:39

标签: java java.util.scanner

我已经发布了关于我的例子的问题,这是不同的问题。我遇到了另一个问题。当我选择选项3(乘)时,我得到的结果为零。如果我选择选项4,则不能除以零(零是我的哨兵)。当我使用int输入要计算的数字时,如何使sentinel成为字符串或char?这是代码。

import java.util.Scanner;

public class SwitchLoopNumbers {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int numbers = 0;
        int result = 0;
        int option;
        boolean quit = true;
        String done = "";

        do {
            System.out.println("CALCULATOR MENU");
            System.out.println("********** ****");
            System.out.println("\n1. Add");
            System.out.println("2. Substract");
            System.out.println("3. Multiply");
            System.out.println("4. Divide");

            System.out.println();
            System.out.print("Enter your option >> ");
            option = scan.nextInt();

            while (quit) {

                switch (option) {

                    case 1:

                        System.out.print("Enter a number, type 0 when done >> ");
                        numbers = scan.nextInt();
                        if (numbers == 0) {
                            quit = false;
                        }
                        result += numbers;
                        break;

                    case 2:
                        System.out.print("Enter a number, type 0 when done >> ");
                        numbers = scan.nextInt();
                        if (numbers == 0) {
                            quit = false;
                        }
                        result = numbers - result;
                        break;

                    case 3:
                        System.out.print("Enter a number, type 0 when done >> ");
                        numbers = scan.nextInt();
                        if (numbers == 0) {
                            quit = false;
                        }
                        result *= numbers;
                        break;

                    case 4:
                        System.out.print("Enter a number, type 0 when done >> ");
                        numbers = scan.nextInt();
                        if (numbers == 0) {
                            quit = false;
                        }
                        result = result / numbers;
                        break;

                }

            }

            System.out.println("The total is: " + result);
            System.out.println("Back to main menu ? y/n ");
            scan.nextLine();
            done = scan.nextLine();
            numbers = 0;
            result = 0;
            quit = true;

        } while ("y".equalsIgnoreCase(done));
        System.out.println("Thank you for using calculator");

    }
}

1 个答案:

答案 0 :(得分:0)

你的主要问题是你已经将result初始化为零,这对于加法和减法来说是一个很好的方法,但是当它涉及乘法时它不会起作用。因此,作为该问题的解决方案,您必须将变量设置为Integer,因此您可以根据需要在循环内更改它,具体取决于您尝试执行的操作。此外,它更好,因为类Integer允许您将其变量分配给null,这在这种情况下非常方便(例如,比使用0更好)。您遇到的另一个问题是您声明当前操作结束并返回结果的方式。您使用0作为停止循环的方法,但0可用作计算中的数字。因此,您应该将输入扫描为字符串,然后如果用户输入=符号,则循环结束并返回结果。然后,您还可以使用Integer类提供给我们的功能,它允许我们从字符串中解析整数并将它们用作常规数字。除此之外,你还有一些语法"错误"并声明你可以更好地编写它。

总的来说,如果你想制作一个真正的计算器,这绝对不是最好的方法,因为你可能面临许多数学问题和例外,但它并不是一个很好的开始。 这可以解决您的大多数问题:



import java.util.Scanner;

public class SwitchLoopNumbers {

    public static void main(String[] args) {
        String number;
        String process = "";
        Integer result = null;
        int option = 0;
        boolean startOver = true;

        while (true) {
            Scanner scan = new Scanner(System.in);

            if (startOver) {
                System.out.print("CALCULATOR MENU" + "\n"
                        + "****************" + "\n"
                        + "1. Add" + "\n"
                        + "2. Substract" + "\n"
                        + "3. Multiply" + "\n"
                        + "4. Divide" + "\n"
                        + "****************" + "\n"
                        + "Enter your option >> ");
                option = scan.nextInt();
            }

            switch (option) {
                case 1:
                    System.out.print("Enter a number, or '=' to get the result >> ");
                    number = scan.next();
                    if ("=".equals(number)) {
                        process = process.replaceFirst("[ + \t]+$", " = ");
                        break;
                    } else if (result == null) {
                        result = Integer.parseInt(number);
                        process += number + " + ";
                        option = 1;
                        startOver = false;
                        continue;
                    } else {
                        result = result + Integer.parseInt(number);
                        process += number + " + ";
                        option = 1;
                        startOver = false;
                        continue;
                    }
                case 2:
                    System.out.print("Enter a number, or '=' to get the result >> ");
                    number = scan.next();
                    if ("=".equals(number)) {
                        process = process.replaceFirst("[- \t]+$", " = ");
                        break;
                    } else if (result == null) {
                        result = Integer.parseInt(number);
                        process += number + " - ";
                        option = 2;
                        startOver = false;
                        continue;
                    } else {
                        result = result - Integer.parseInt(number);
                        process += number + " - ";
                        option = 2;
                        startOver = false;
                        continue;
                    }
                case 3:
                    System.out.print("Enter a number, or '=' to get the result >> ");
                    number = scan.next();
                    if ("=".equals(number)) {
                        process = process.replaceFirst("[ * \t]+$", " = ");
                        break;
                    } else if (result == null) {
                        result = Integer.parseInt(number);
                        process += number + " * ";
                        option = 3;
                        startOver = false;
                        continue;
                    } else {
                        result = result * Integer.parseInt(number);
                        process += number + " * ";
                        option = 3;
                        startOver = false;
                        continue;
                    }
                case 4:
                    System.out.print("Enter a number, or '=' to get the result >> ");
                    number = scan.next();
                    if ("=".equals(number)) {
                        process = process.replaceFirst("[ / \t]+$", " = ");
                        break;
                    } else if (result == null) {
                        result = Integer.parseInt(number);
                        process += number + " / ";
                        option = 4;
                        startOver = false;
                        continue;
                    } else {
                        result = result / Integer.parseInt(number);
                        process += number + " / ";
                        option = 4;
                        startOver = false;
                        continue;
                    }
            }
            System.out.println("The result of " + process.replace("+ 0 ", "") + result);

            System.out.print("Back to main menu? [y/n]: ");
            if (scan.next().equalsIgnoreCase("y")) {
                process = "";
                result = null;
                startOver = true;
            } else if (scan.next().equalsIgnoreCase("n")) {
                System.out.println("Thank you for using calculator.");
                break;
            } else {
                System.out.println("Wrong input!");
                break;
            }
        }
    }
}