我正在开发一个程序,该程序将为用户提供一个菜单,允许他们选择一个选项,然后根据他们的菜单选择要求不同的数字进行计算。我已经开始使用该程序的基本概要,但我需要帮助实现循环并且正常工作。
到目前为止,这是我的代码:
import java.util.Scanner;
public class LB04Alexander {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("This program will perform several types of calculations.");
System.out.println();
System.out.println("-MENU-");
System.out.println("Select from the following menu options:");
System.out.println("1 - Compute integer powers of a number");
System.out.println("2 - Compute a factorial");
System.out.println("3 - Compute a square root");
System.out.println("4 - Compute a cube root");
System.out.println("5 - Compute an exponential");
System.out.println("6 - Compute the sine of an angle");
System.out.println("7 - Compute the cosine of an angle");
System.out.println("8 - Convert a positive integer to binary");
System.out.println("9 - Exit");
System.out.println("Please enter the number corresponding to your choice:");
int menuChoice = input.nextInt();
while (menuChoice >= 1 && menuChoice <= 9); {
switch (menuChoice) {
case 1:
System.out.println("You have chosen to compute integer powers of a number.");
System.out.println("Please enter any number for the base:");
double base1 = input.nextDouble();
System.out.println("Now, enter a non-negative integer for the exponent:");
int exponent1 = input.nextInt();
if (exponent1 < 0)
System.out.println("Error: exponent is negitive.");
else
System.out.println(base1 + "^" + exponent1 + " = " + "");
break;
case 2:
System.out.println("You have chosen to compute a factorial (n!) of a non-negative integer.");
System.out.println("Please enter a non-negitive integer for n:");
long fact = input.nextLong();
int result = 1;
if (fact < 0)
System.out.println("Error: integer is negitive.");
else if (fact >= 127)
System.out.println("Error: Answer too large to calculate");
else
for (int i = 1; i <= fact; i++) {
result = result * i;
}
System.out.println(fact + "! = " + result );
break;
case 3:
System.out.println("You have chosen to compute a square root.");
break;
case 4:
System.out.println("You have chosen to compute a cube root.");
break;
case 5:
System.out.println("You have chosen to compute an exponential.");
break;
case 6:
System.out.println("You have chosen to compute the sine of an angle.");
break;
case 7:
System.out.println("You have chosen to compute the cosine of an angle.");
break;
case 8:
System.out.println("You have chosen to convert a positive integer to binary");
break;
case 9:
System.out.println("You have chosen to exit");
System.out.println("Program LB04Alexander is now terminating...");
input.close();
System.out.println("The program has ended. Goodbye.");
break;
default:
System.out.println("Invalid menu choice, please try again.");
break;
} }
}
}
我遇到的第一个问题是让菜单循环正确。它要么不起作用,要么永远循环。
答案 0 :(得分:3)
while (menuChoice >= 1 && menuChoice <= 9);
摆脱那个分号。当你的选择满足条件时,它会永远循环。如果没有,它会在打印出Invalid menu choice, please try again.
后立即退出(因为没有一个案例匹配)。
答案 1 :(得分:0)
试试这个,它比你的更模块化,但差不多......
import java.util.Scanner;
public class LB04Alexander {
public static final Scanner SCANNER = new Scanner(System.in);
public static void main(String[] args) {
int choice;
showMenu();
while((choice = getInt("Please enter the number corresponding to your choice:")) != 9) {
doCalculation(choice);
showMenu();
}
}
public static void showMenu() {
System.out.println("This program will preform several types on calculations.");
System.out.println();
System.out.println("===============MENU=====================");
System.out.println("Select from the following menu options:");
System.out.println("1 - Compute integer powers of a number");
System.out.println("2 - Compute a factorial");
System.out.println("3 - Compute a square root");
System.out.println("4 - Compute a cube root");
System.out.println("5 - Compute an exponential");
System.out.println("6 - Compute the sine of an angle");
System.out.println("7 - Compute the cosine of an angle");
System.out.println("8 - Convert a positive integer to binary");
System.out.println("9 - Exit");
System.out.println("========================================");
}
private static void doCalculation(int choice) {
switch (choice) {
case 1:
System.out.println("\nYou have chosen to compute integer powers of a number.");
double base1 = getDouble("Please enter the number corresponding to your choice:");
int exponent1 = getInt("Now, enter a non-negative integer for the exponent:");
System.out.println(base1 + "^" + exponent1 + " = " + "");
break;
case 2:
System.out.println("You have chosen to compute a factorial (n!) of a non-negative integer.");
long fact = getLong("Please enter a non-negitive integer for n:");
int result = 1;
if (fact < 0)
System.out.println("Error: integer is negitive.");
else if (fact >= 127)
System.out.println("Error: Answer too large to calculate");
else
for (int i = 1; i <= fact; i++) {
result = result * i;
}
System.out.println(fact + "! = " + result );
break;
case 3:
System.out.println("You have chosen to compute a square root.");
break;
case 4:
System.out.println("You have chosen to compute a cube root.");
break;
case 5:
System.out.println("You have chosen to compute an exponential.");
break;
case 6:
System.out.println("You have chosen to compute the sine of an angle.");
break;
case 7:
System.out.println("You have chosen to compute the cosine of an angle.");
break;
case 8:
System.out.println("You have chosen to convert a positive integer to binary");
break;
default:
System.out.println("Invalid menu choice, please try again.");
break;
}
}
private static int getInt(String prompt) {
boolean unassigned = true;
int value = 0;
while(unassigned) {
try {
System.out.println(prompt);
value = SCANNER.nextInt();
unassigned = false;
}
catch (IllegalArgumentException e) {}
}
System.out.println("[" + value + "]");
return value;
}
private static double getDouble(String prompt) {
boolean unassigned = true;
double value = 0;
while(unassigned) {
try {
System.out.println(prompt);
value = SCANNER.nextDouble();
unassigned = false;
}
catch (IllegalArgumentException e) {}
}
System.out.println("[" + value + "]");
return value;
}
private static long getLong(String prompt) {
boolean unassigned = true;
long value = 0;
while(unassigned) {
try {
System.out.println(prompt);
value = SCANNER.nextLong();
unassigned = false;
}
catch (IllegalArgumentException e) {}
}
System.out.println("[" + value + "]");
return value;
}
}