我自己写的Calculator.java有什么问题?
What's wrong with my self-written Calculator.java?
我在 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);
}
}
}
阅读您的输入,然后执行您的逻辑。
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()
) 并将该字符串与您的运算符字符串进行比较。
如果你想一个接一个地执行多个操作,你应该从应用程序中检索运算符和数字,并使用循环来允许它,而不是在你的程序中提供数字作为参数。
否则,您应该 运行 您的程序需要执行一些计算,这似乎不适合计算器用例。
此外,您应避免混合使用 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");
}
}
}
}
每次您调用 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);
}
}
我在 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);
}
}
}
阅读您的输入,然后执行您的逻辑。
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()
) 并将该字符串与您的运算符字符串进行比较。
如果你想一个接一个地执行多个操作,你应该从应用程序中检索运算符和数字,并使用循环来允许它,而不是在你的程序中提供数字作为参数。
否则,您应该 运行 您的程序需要执行一些计算,这似乎不适合计算器用例。
此外,您应避免混合使用 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");
}
}
}
}
每次您调用 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);
}
}