我在java中编写了一个小计算器,但它没有按照它应该做的那样......:p
因此,如果我在控制台中输入“a”,它将按照希望进行添加。但是如果我想做另一个操作,例如乘法,输入“m”什么都不做。
如果你在控制台(a,s,m,d)中执行此顺序,其他操作似乎只能起作用,可能是因为这是下面代码中的顺序。
但我该如何解决这个问题呢?如果我键入“m”表示乘法已完成,或者我输入“d”表示除法已完成,我想要。这里我的错误是什么?
import java.util.Scanner;
public class Calculator{
public static void main(String[] args){
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
Scanner input = new Scanner(System.in);
System.out.println("a: addition");
System.out.println("s: subtraction");
System.out.println("m: multiplication");
System.out.println("d: division");
if(input.nextLine().equals("a")){
double add;
add=x+y;
System.out.println(add);
}
else if(input.next().equals("s")){
double sub;
sub=x-y;
System.out.println(sub);
}
else if(input.next().equals("m")){
double mul;
mul=x*y;
System.out.println(mul);
}
else if(input.next().equals("d")){
double div;
div=x/y;
System.out.println(div);
}
}
}
答案 0 :(得分:1)
阅读你的输入,然后做你的逻辑。
import java.util.Scanner;
public class Calculator{
public static void main(String[] args){
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
Scanner input = new Scanner(System.in);
System.out.println("a: addition");
System.out.println("s: subtraction");
System.out.println("m: multiplication");
System.out.println("d: division");
String operator = input.nextLine();
if(operator.equals("a")){
double add;
add=x+y;
System.out.println(add);
}
else if(operator.equals("s")){
double sub;
sub=x-y;
System.out.println(sub);
}
else if(operator.equals("m")){
double mul;
mul=x*y;
System.out.println(mul);
}
else if(operator.equals("d")){
double div;
div=x/y;
System.out.println(div);
}
}
}
您遇到的问题是每个if
语句都是从输入中读取并耗尽System.in
的输入。因此,它读取一行并将其与" a"进行比较。如果它是" a",它就像你说的那样添加了。 否则,它继续,尝试从System.in 读取下一个字符,并将其与" s"进行比较。等等" m"和" d"。
您真正想要的是读取输入一次(String operator = input.nextLine()
)并将该字符串与您的运算符字符串进行比较,而不是阅读如此多的输入。
答案 1 :(得分:0)
如果要逐个执行多个操作,则应从应用程序中检索运算符和数字,并使用循环来允许它而不是在程序中将数字作为参数提供。
否则你应该尽可能多地运行你的程序来执行一些计算,这对于计算器用例来说似乎是不可取的。
此外,你应该避免混合input.nextLine()
和input.next()
,你可能会有一些不可预测的结果。
import java.util.Scanner;
public class Calculator{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
while (true){
System.out.println("a: addition");
System.out.println("s: subtraction");
System.out.println("m: multiplication");
System.out.println("d: division");
System.out.println("q: quit");
String operator = input.next();
if (operator.equals("q"){
return;
}
double x = input.nextDouble();
double y = input.nextDouble();
if(operator.equals("a")){
double add;
add=x+y;
System.out.println(add);
}
else if(operator.equals("s")){
double sub;
sub=x-y;
System.out.println(sub);
}
else if(operator.equals("m")){
double mul;
mul=x*y;
System.out.println(mul);
}
else if(operator.equals("d")){
double div;
div=x/y;
System.out.println(div);
}
else{
System.out.println("enter one of the proposed options");
}
}
}
}
答案 2 :(得分:0)
每次调用next()或nextLine()时,都会期望在运行时输入。 因此,首先,每次输入只调用一次next()或nextLine()。
要继续执行操作,您必须运行循环。您可以按如下方式使其更具互动性:
import java.util.Scanner;
public class Calculator{
public static void main(String[] args){
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
do{
System.out.println("a: addition");
System.out.println("s: subtraction");
System.out.println("m: multiplication");
System.out.println("d: division");
String input = new Scanner(System.in).next();
if(input.equals("a")){
double add;
add=x+y;
System.out.println(add);
}
else if(input.equals("s")){
double sub;
sub=x-y;
System.out.println(sub);
}
else if(input.equals("m")){
double mul;
mul=x*y;
System.out.println(mul);
}
else if(input.equals("d")){
double div;
div=x/y;
System.out.println(div);
}
System.out.print("Want to calculate more (Y/N) : ");
String choice = new Scanner(System.in).next();
if(choice.equals("N") || choice.equals("n"))
break;
else if(choice.equals("Y") || choice.equals("y"))
continue;
else{
System.out.println("Bad choice");
break;
}
}while(true);
}
}