【问题标题】:logical bug in my code in java... in switch case我的Java代码中的逻辑错误......在开关情况下
【发布时间】:2017-04-21 07:52:05
【问题描述】:
package com.company;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner myScanner = new Scanner(System.in);
        int operator;
        double number1, number2, result;
        boolean ask = true;
        while (ask) {

        System.out.println("please select your operator:\n"
                + "1 for +\n" +
                "2 for -\n" +
                "3 for *\n" +
                "4 for %\n" +
                "");
        operator = myScanner.nextInt();
        System.out.println("you chose " + operator + " operator babe");


            System.out.println("please enter your first number");
            Scanner numberScanner = new Scanner(System.in);
            number1 = numberScanner.nextDouble();
            System.out.println("please enter your second number");
            Scanner numberScanner2 = new Scanner(System.in);
            number2 = numberScanner2.nextDouble();


            switch (operator) {
                case 1:
                    result = number1 + number2;
                    System.out.println("result is:" + result);
                    break;
                case 2:
                    result = number1 - number2;
                    System.out.println("result is:" + result);
                    break;
                case 3:
                    result = number1 * number2;
                    System.out.println("result is:" + result);
                    break;
                case 4:
                    result = number1 / number2;
                    System.out.println("result is:" + result);
                    break;
                default:
                    System.out.println("you chosen the wrong operator babe :)");
                    break;
            }


            System.out.println("do yo want to continue?\n" +
                    "y for yes\n" +
                    "n for no\n");
            char askInput = myScanner.next().charAt(0);
            if (askInput=='n') ask=false;
        }
    }
}

我的开关盒出了问题
如果我按任何数字或字母,如 5 或 6 或...它应该打印 you chose wrong operator

我认为问题在于我的默认设置,但我不知道问题在哪里?

【问题讨论】:

  • 实际上应该将switch 语句放在一个位置,然后再输入有效选项的数字,然后是第一个用户输入,而不是最后。当在第一次输入后,您立即开始读取两个数字并检查用户在之后选择的选项时,它应该如何告诉您这是错误的输入。尝试输入5,然后输入2个数字,然后您将收到您想要的消息。
  • 在我选择例如 5 后,它会继续并接受 5,但从逻辑上讲,它不能接受 5,默认应该运行

标签: java switch-statement java.util.scanner


【解决方案1】:

只需像这样重新排序您的代码

`public static void main(String[] args) {
    Scanner myScanner = new Scanner(System.in);
    int operator;
    double number1, number2, result;
    boolean ask = true;
    while (ask) {
        System.out.println("please enter your first number");
        Scanner numberScanner = new Scanner(System.in);
        number1 = numberScanner.nextDouble();
        System.out.println("please enter your second number");
        Scanner numberScanner2 = new Scanner(System.in);
        number2 = numberScanner2.nextDouble();

        System.out.println("please select your operator:\n"
                + "1 for +\n"
                + "2 for -\n"
                + "3 for *\n"
                + "4 for %\n"
                + "");
        operator = myScanner.nextInt();

        switch (operator) {
            case 1:
                result = number1 + number2;
                System.out.println("result is:" + result);
                break;
            case 2:
                result = number1 - number2;
                System.out.println("result is:" + result);
                break;
            case 3:
                result = number1 * number2;
                System.out.println("result is:" + result);
                break;
            case 4:
                result = number1 / number2;
                System.out.println("result is:" + result);
                break;
            default:
                System.out.println("you chosen the wrong operator babe :)");
                break;
        }
        System.out.println("you chose " + operator + " operator babe");

        System.out.println("do yo want to continue?\n"
                + "y for yes\n"
                + "n for no\n");
        char askInput = myScanner.next().charAt(0);
        if (askInput == 'n') {
            ask = false;
        }
    }
}`

你会没事的

【讨论】:

    【解决方案2】:

    至于我的评论,如果您想在让用户输入另外 2 个数字之前验证用户所做的输入(对于选项),那么,是的,您实际上应该这样编程,即验证在第一个数字之后进行用户输入。这是您的代码稍作修正的版本。

    public static void main(String[] args) {
        int operator;
        double result;
        boolean ask = true;
        Scanner numberScanner = new Scanner(System.in);
        while (ask) {
    
            System.out.println(
                    "please select your operator:\n" + "1 for +\n" + "2 for -\n" + "3 for *\n" + "4 for %\n" + "");
            operator = numberScanner.nextInt();
            System.out.println("you chose " + operator + " operator babe");
    
            // Here was your "Mistake". You instantly started asking the user for another input,
            // but actually wanted to ahve the switch statment here
    
            switch (operator) {
            case 1:
                result = get_num1(numberScanner) + get_num2(numberScanner);
                System.out.println("result is:" + result);
                break;
            case 2:
                result = get_num1(numberScanner) - get_num2(numberScanner);
                System.out.println("result is:" + result);
                break;
            case 3:
                result = get_num1(numberScanner) * get_num2(numberScanner);
                System.out.println("result is:" + result);
                break;
            case 4:
                result = get_num1(numberScanner) % get_num2(numberScanner);
                System.out.println("result is:" + result);
                break;
            default:
                System.out.println("you chosen the wrong operator babe :)");
                break;
    
            }
    
            System.out.println("do yo want to continue?\n" + "y for yes\n" + "n for no\n");
            char askInput = numberScanner.next().charAt(0);
            if (askInput == 'n')
                ask = false;
        }
    }
    
    public static double get_num1(Scanner scanner) {
        System.out.println("please enter your first number");
        return scanner.nextDouble();
    }
    
    public static double get_num2(Scanner scanner) {
        System.out.println("please enter your second number");
        return scanner.nextDouble();
    }
    

    【讨论】:

    • tnx 给你亲爱的
    【解决方案3】:

    您可以在分配输入时验证运算符。

    例如使用 if 条件并检查它是否在 1 和 5 之间,如果不打印你想要的任何内容

    【讨论】:

      【解决方案4】:

      两件事:

      你不需要两台扫描仪,只用一台就足够了

      代码之所以如此,是因为您在询问要操作的数字后进入开关盒...

      一些条件,例如:

      operator = myScanner.nextInt();
      if (operator < 1 || operator > 4) {
      
       }
      

      可能有帮助....

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        相关资源
        最近更新 更多