如何解决连续计算器
我正在制作一个计算器,您可以在其中询问两个数字和一个运算。如果用户想继续,要求一个号码和一个操作。然后,使用最近的结果和新的输入值执行选定的操作。 我被困在存储上次操作的结果以将其用于另一个操作。这是我的代码
import java.util.Scanner;
public class practice {
static double add,sub,mul,div;
static double another;
public static void main(String[] args) {
char choose,cont;
Scanner u = new Scanner(system.in);
System.out.print("Enter number 1: ");
double one = Double.parseDouble(u.nextLine());
System.out.print("Enter number 2: ");
double two = Double.parseDouble(u.nextLine());
do {
System.out.print("\nSelect an operation\n[A]Addition\n[B]Subtraction\n[C]Multiplication\n[D]Division");
System.out.print("\n\nChoose: ");
choose = u.next().charat(0);
if ((choose == 'A') || (choose == 'a')) {
add = one + two;
add += another;
System.out.println("The sum is " + add);
} else if (choose == 'B' || choose == 'b') {
sub = one - two;
sub -= another;
System.out.println("The difference is " + sub);
} else if (choose == 'C' || choose == 'c') {
mul = one * two;
mul *= another;
System.out.println("The product is " + mul);
} else if (choose == 'D' || choose == 'd') {
div = one / two;
div /= another;
System.out.println("The quotient is " + div);
} else {
System.out.println("Invalid Selection");
}
System.out.print("Continue?[Y/N]: ");
cont = u.next().charat(0);
if (cont == 'Y') {
System.out.print("Enter another number: ");
another = u.nextDouble();
another = another;
} else {
System.out.println("End of Program");
}
} while (cont == 'Y');
}
}
解决方法
您可以将最后一个值的值置于循环之外。下面是一些伪代码来演示我的意思:
variableStore = 0
loop:
perform operations
when printing out results to the user,assign variableStore = result
Next time,variableStore would be the value of the previous result
,
您不需要所有这些变量。变量 one
总是 存储最新的结果。此外,由于您的类只包含一个方法,即 main
,因此无需声明类成员变量。请参阅解释变量范围的 Java Language specification 的第 6.3 节。该链接适用于 Java 7,但对所有 Java 版本都有效。
这是我对 practice
类的重写。请注意,我将类名更改为 Practice
,以与 Java naming conventions 保持一致。
import java.util.Scanner;
public class Practice {
public static void main(String[] args) {
char choose,cont = 'Y';
Scanner u = new Scanner(System.in);
System.out.print("Enter number 1: ");
double one = Double.parseDouble(u.nextLine());
double two = 0;
boolean invalidSelection = false;
do {
if (!invalidSelection) {
System.out.print("Enter another number: ");
two = Double.parseDouble(u.nextLine());
}
invalidSelection = false;
System.out.print(
"\nSelect an operation\n[A]Addition\n[B]Subtraction\n[C]Multiplication\n[D]Division");
System.out.print("\n\nChoose: ");
choose = u.nextLine().charAt(0);
if ((choose == 'A') || (choose == 'a')) {
one += two;
System.out.println("The sum is " + one);
}
else if (choose == 'B' || choose == 'b') {
one -= two;
System.out.println("The difference is " + one);
}
else if (choose == 'C' || choose == 'c') {
one *= two;
System.out.println("The product is " + one);
}
else if (choose == 'D' || choose == 'd') {
one /= two;
System.out.println("The quotient is " + one);
}
else {
System.out.println("Invalid Selection");
invalidSelection = true;
continue;
}
System.out.print("Continue?[Y/N]: ");
cont = u.nextLine().charAt(0);
} while (cont == 'Y' || cont == 'y');
System.out.println("End of Program");
}
}
请注意,在上面的代码中,我用对方法 next
的调用替换了对方法 java.util.Scanner
(属于 nextLine
类)的调用。有关更多详细信息,请参阅此 SO 问题。
Scanner is skipping nextLine() after using next() or nextFoo()?
我建议您使用调试器运行代码以了解其工作原理。
这是示例运行的输出。
Enter number 1: 3
Enter another number: 2
Select an operation
[A]Addition
[B]Subtraction
[C]Multiplication
[D]Division
Choose: x
Invalid Selection
Select an operation
[A]Addition
[B]Subtraction
[C]Multiplication
[D]Division
Choose: c
The product is 6.0
Continue?[Y/N]: y
Enter another number: 4
Select an operation
[A]Addition
[B]Subtraction
[C]Multiplication
[D]Division
Choose: b
The difference is 2.0
Continue?[Y/N]: y
Enter another number: 0.5
Select an operation
[A]Addition
[B]Subtraction
[C]Multiplication
[D]Division
Choose: d
The quotient is 4.0
Continue?[Y/N]: n
End of Program
,
试试这个代码(它对我有用):
import java.util.Scanner;
public class practice {
static double prevAns = 0;
static double another;
static double one;
static double add,sub,mul,div;
static boolean contin = false;
public static void main (String []args){
while(true){
char choose,cont;
Scanner u=new Scanner(System.in);
if (!contin){
System.out.print("Enter number 1: ");
one= Double.parseDouble(u.nextLine());
} else {
one = prevAns;
}
System.out.print("Enter number 2: ");
double two= Double.parseDouble(u.nextLine());
System.out.print("\nSelect an operation\n[A]Addition\n[B]Subtraction\n[C]Multiplication\n[D]Division");
System.out.print("\n\nChoose: ");
choose=u.next().charAt(0);
if((choose=='A')||(choose=='a')){
add = one+two;
prevAns = add;
System.out.println("The sum is "+add);}
else if (choose=='B'||choose=='b') {
sub=one-two;
prevAns = sub;
System.out.println("The difference is "+sub);
}else if (choose=='C'||choose=='c'){
mul=one*two;
prevAns = mul;
System.out.println("The product is "+mul);
}else if(choose=='D'||choose=='d'){
div=one/two;
prevAns = div;
System.out.println("The quotient is "+ div);}
else{
System.out.println("Invalid Selection");
}
System.out.print("Continue?[Y/N]: ");
cont=u.next().charAt(0);
if(cont=='Y'){
contin = true;
} else{
System.out.println("End of Program");
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。