Reputation:
I'm making a scientific calculator program in Java, I got the program to get the answers that I need with a switch statement.
But I also need that switch statement to loop and I had a lot of problems with this.
Can anyone help me?
This is the code:
import java.util.Scanner;
import java.lang.Math;
import static java.lang.Math.log10;
public class Main {
public static void main(String[] args) {
int opt = 0;
int counter = 0;
double firstOperand = 0;
double secondOperand = 0;
double sumOfcalculations = 0;
double result = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Current Result: " + sumOfcalculations);
System.out.println(" ");
System.out.println("Calculator Menu");
System.out.println("---------------");
System.out.println("0. Exit Program");
System.out.println("1. Addition");
System.out.println("2. Subtraction");
System.out.println("3. Multiplication");
System.out.println("4. Division");
System.out.println("5. Exponentiation");
System.out.println("6. Logarithm");
System.out.println("7. Display Average");
System.out.println(" ");
System.out.print("Enter Menu Selection: ");
opt = sc.nextInt();
switch (opt){
case 0:
return;
case 1:
System.out.print("Enter first operand: "); // Ask for first operand
firstOperand = sc.nextDouble(); // Gets first double input
System.out.print("Enter second operand: "); // Ask for 2nd operand
secondOperand = sc.nextDouble(); // gets 2nd operand
result = firstOperand + secondOperand;
++counter;
sumOfcalculations = sumOfcalculations + result;
System.out.print("Result: " + result + "Counter: " + counter);
case 2:
System.out.print("Enter first operand: "); // Ask for first operand
firstOperand = sc.nextDouble(); // Gets first double input
System.out.print("Enter second operand: "); // Ask for 2nd operand
secondOperand = sc.nextDouble(); // gets 2nd operand
result = firstOperand - secondOperand;
++counter;
sumOfcalculations = sumOfcalculations + result;
System.out.print("Result: " + result + "Counter: " + counter);
case 3:
System.out.print("Enter first operand: "); // Ask for first operand
firstOperand = sc.nextDouble(); // Gets first double input
System.out.print("Enter second operand: "); // Ask for 2nd operand
secondOperand = sc.nextDouble(); // gets 2nd operand
result = firstOperand * secondOperand;
++counter;
sumOfcalculations = sumOfcalculations + result;
System.out.print("Result: " + result + "Counter: " + counter);
case 4:
System.out.print("Enter first operand: "); // Ask for first operand
firstOperand = sc.nextDouble(); // Gets first double input
System.out.print("Enter second operand: "); // Ask for 2nd operand
secondOperand = sc.nextDouble(); // gets 2nd operand
result = firstOperand / secondOperand;
++counter;
sumOfcalculations = sumOfcalculations + result;
System.out.print("Result: " + result + "Counter: " + counter);
case 5:
System.out.print("Enter first operand: "); // Ask for first operand
firstOperand = sc.nextDouble(); // Gets first double input
System.out.print("Enter second operand: "); // Ask for 2nd operand
secondOperand = sc.nextDouble(); // gets 2nd operand
result = Math.pow(firstOperand, secondOperand);
++counter;
sumOfcalculations = sumOfcalculations + result;
System.out.print("Result: " + result + "Counter: " + counter);
case 6:
System.out.print("Enter first operand: "); // Ask for first operand
firstOperand = sc.nextDouble(); // Gets first double input
System.out.print("Enter second operand: "); // Ask for 2nd operand
secondOperand = sc.nextDouble(); // gets 2nd operand
result = (log10(secondOperand)) / (log10(firstOperand));
++counter;
sumOfcalculations = sumOfcalculations + result;
System.out.print("Result: " + result + "Counter: " + counter);
case 7:
System.out.println("Sum of Calculations: " + sumOfcalculations);
System.out.println("Number of Calculations: " + counter);
System.out.println("Average of calculations: " + sumOfcalculations/counter);
default:
System.out.println("Error: Invalid selection!");
break;
}
}
}
I know that I made the switch statement a little bit too complicated but this was the only way I made it work as I needed.
Upvotes: 0
Views: 104
Reputation: 191701
Use an actual looping mechanism
Scanner sc = new Scanner(System.in);
String input;
while (true) {
input = sc.nextLine();
if (input.equals("0")) break;
menu(Integer.parseInt(input)); // Make 'static void menu(int op)' a separate method, not dump everything in the main method
}
System.out.println("Goodbye!");
return;
You'll also want to make the cases with a break
case 1:
addition(); // TODO: define this
break;
case 2:
subtraction(); // TODO: define this
break;
// ... etc
default:
Upvotes: 2