【问题标题】:Could you help me with my loop calculator?你能帮我用循环计算器吗?
【发布时间】:2020-05-05 08:04:44
【问题描述】:

我正在为学校项目制作计算器。我的问题是,当我输入例如1 op = sc.next().charAt(0);,第一个 if 语句执行它的主体,即使它不是真的。此外,它不会在循环开始时返回,但程序会结束。我还是 Java 的新手,所以这就是我来这里的原因。 此外,我愿意接受任何建议以使其变得更好。 :)

谢谢!


import java.util.Scanner;

public class Kalkulacka {
    public static void main(String[] args) {

        System.out.println("Vitajte v programe na výpočet jednoduchých matematických príkladov!");
        Scanner sc= new Scanner(System.in);
        double a;
        char op = 0;
        double b;
        double priklad = 0;
        int i=0;
        System.out.println("Zadajte číslo");

        a= sc.nextDouble();

        priklad= a;



        while (true) {

            if (i<1) {
                System.out.println("Zvoľte si operátora:");
                System.out.println("1- +");
                System.out.println("2- -");
                System.out.println("3- *");
                System.out.println("4- /");

                op = sc.next().charAt(0);

                if (op != 1 && op != 2 && op != 3 && op != 4) {
                    System.out.println("Zadali ste nesprávne číslo");
                    return;
                }
            }

            if (i>=1) {
                System.out.println("Zvoľte si operátora:");
                System.out.println("1- +");
                System.out.println("2- -");
                System.out.println("3- *");
                System.out.println("4- /");
                System.out.println("5- =");

                op= sc.next().charAt(0);

                if (op!=1 && op!=2 && op!=3 && op!=4 && op!=5) {
                    System.out.println("Zadali ste nesprávne číslo");
                    return;
                }

                if (op==5) {
                    break;
                }
            }

            System.out.println("Zadajte číslo");

            b= sc.nextDouble();

            if (i<1) {
                switch (op) {
                    case 1:
                        priklad = a + b;
                    case 2:
                        priklad = a - b;
                    case 3:
                        priklad = a * b;
                    case 4:
                        priklad = a / b;
                }
            }

            else {
                switch (op) {
                    case 1:
                        priklad = priklad + b;
                    case 2:
                        priklad = priklad - b;
                    case 3:
                        priklad = priklad * b;
                    case 4:
                        priklad = priklad / b;
                }
            }
            i=i++;
        }

        System.out.println("Výsledok je: "+priklad);
    }
}```

【问题讨论】:

  • 注意:Java 中的case 需要breakreturn 在末尾,否则代码将在下一个case 继续 - 检查The switch Statement 教程

标签: java loops if-statement while-loop char


【解决方案1】:

我认为问题是

                op = sc.next().charAt(0);

            if (op != 1 && op != 2 && op != 3 && op != 4) {
                System.out.println("Zadali ste nesprávne číslo");
                return;
            }

Op 是一个字符,因此当您从用户那里获得输入时,它是“1”、“2”、“3”、“4”,但您检查与 1、2、3、4 是否相等。条件始终为真然后程序返回。

【讨论】:

    【解决方案2】:

    字符只不过是一个数字。这就是为什么您可以将charint 进行比较,就像在op != 1-check 中一样。然而,'1' 的适当数字(即所谓的 ASCII 码)不是1,而是4949 肯定不等于 1,所以你的条件 op != 1 匹配。

    要么检查op == 49,要么只检查op == '1'(为了进一步检查,您肯定需要适当的ASCII码50、51和52)。

    【讨论】:

    • tysm 我肯定会学习更多的 ASCII 码,但我需要让它工作的最后一件事。在第一个开关中,前三种情况不起作用,因为 var priklad 是灰色的,并表示“分配给‘priklad’的值 a+b(或 a-b 或 a*b)永远不是用户”。你能帮我解决这个问题吗?
    • 哦,好吧,我已经修好了:)
    • 这些并不是真正的 ASCII 值,它们是 Unicode 代码点,只是前 128 个 Unicode 代码点与 ASCII 相同。迂腐,我知道,但是当不使用 ASCII 字符集时,将它们称为 ASCII 值是我的一个小烦恼。
    【解决方案3】:

    我的问题是,当我输入例如1 在 op = sc.next().charAt(0);, 第一个 if 语句执行它的主体,即使它不是真的。

    替换

    if (op != 1 && op != 2 && op != 3 && op != 4)
    

    if (op != '1' && op != '2' && op != '3' && op != '4')
    

    当您比较 char 值时。如果要与它们的 ASCII 值进行比较,可以使用op != 49 等。检查https://ee.hawaii.edu/~tep/EE160/Book/chap4/subsection2.1.1.1.html

    这同样适用于您的switch...case,即您应该使用case '1' 而不是case 1

    另外,它不会在循环开始时返回,但程序 结束。

    return 替换为continue

    【讨论】:

      猜你喜欢
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多