我正在为学校项目制作计算器。我的问题是,当我输入例如在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);
}
}```
一个字符不过是一个数字。这就是为什么您可以像在char
检查中一样比较int
与op != 1
的原因。但是,'1'
的适当数字-所谓的ASCII码-不是1
,而是49
。 49
当然不等于1
,因此您的条件op != 1
匹配。
要么检查op == 49
,要么只检查op == '1'
(对于进一步的检查,您肯定需要适当的ASCII码50、51和52)。
我认为是]
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是否相等。条件始终为true,并且程序返回。
我的问题是,当我输入1 at op = sc.next()。charAt(0);,第一个if语句起作用,即使它不是真的。