如何使用 switch 语句或循环从一种方法切换到另一种方法?
How do I switch from one method to another with switch statement or loop?
到目前为止,我已经能够制作方法并允许用户立即退出。我遇到的麻烦是....
- 让用户select进行运算(加、减、乘、除)
- 有选择操作的方法
- 然后继续执行 getNumber 语句和不同的操作
编辑:感谢 dawner 在 getNumber 方面的帮助,我欠你的
这是我目前所拥有的
import java.util.*;
import java.security.*;
public class Project6
{
public static void main(String[] args)
{
boolean Go = true;
while(Go)
{
Scanner input = new Scanner(System.in);
System.out.println("Choose an operation");
System.out.println("1 for Addition");
System.out.println("2 for Subtraction");
System.out.println("3 for Multiplication");
System.out.println("4 for Division");
System.out.println("5 to Quit");
int response=input.nextInt();
if(response == 5)
{
System.out.print("You have quit the calculator");
Go = false;
}
Operation(response);
}
}
public static void Operation(int response)
{
switch(response)
{
case 1: add(); break;
case 2: subtract(); break;
case 3: multiply(); break;
case 4: divide(); break;
default: System.out.println("Invalid Response");
}
}
public static void getNumber()
{
try
{
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
int digit1;
digit1 = num.nextInt();
int digit2;
digit2 = num.nextInt();
}
catch(NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
}
}
public static void add(int digit1, int digit2)
{
Scanner input = new Scanner(System.in);
int sum;
sum = digit1 + digit2;
System.out.println("What is " + digit1 + " + " + digit2 + " ?");
int ans;
ans = input.nextInt();
if(ans == sum)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
public static void subtract(int digit1, int digit2)
{
Scanner input = new Scanner(System.in);
if(digit2 > digit1)
{
int temp = digit1;
digit1 = digit2;
digit2 = temp;
}
int diff = digit1 - digit2;
System.out.println("What is " + digit1 + " - " + digit2 + " ?");
int ans;
ans = input.nextInt();
if(ans == diff)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
public static void multiply(int digit1, int digit2)
{
Scanner input = new Scanner(System.in);
int product = digit1 * digit2;
System.out.println("What is " + digit1 + " * " + digit2 + " ?");
int ans = input.nextInt();
if(ans == product)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
public static void divide(int digit1, int digit2)
{
int quotient;
quotient = digit1 / digit2;
int remainder = digit1 % digit2;
if(digit2 > digit1)
{
int temp = digit1;
digit1 = digit2;
digit2 = temp;
}
if(remainder == 0)
{
Scanner input = new Scanner(System.in);
System.out.println("What is " + digit1 + " / " + digit2 + " ?");
int ans = input.nextInt();
System.out.println("What is the remainder?");
int remainAns = input.nextInt();
if(ans == quotient && remainAns == remainder)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
else
{
Scanner input = new Scanner(System.in);
System.out.println("What is " + digit1 + " / " + digit2 + " ?");
int ans;
ans = input.nextInt();
if(ans == quotient)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
}
public static void correctPrompt()
{
try
{
String response;
response = "";
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
int randResponse;
randResponse = num.nextInt(4);
switch(randResponse)
{
case 0: response = "Excellent!"; break;
case 1: response = "Nice Work!"; break;
case 2: response = "Right - you rock"; break;
case 3: response = "Well Done"; break;
}
System.out.println(response);
}
catch (NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
}
}
public static void incorrectPrompt()
{
try
{
String response= "";
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
int randResponse;
randResponse = num.nextInt(4);
switch(randResponse)
{
case 0: response = "No, please try again"; break;
case 1: response = "Oopsie! You are SO close!"; break;
case 2: response = "Don't give up - you can do this"; break;
case 3: response = "Promime no fumigare - Close, but no cigar"; break;
}
System.out.println(response);
}
catch (NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
}
}
}
我能看到的最大问题是您的 Operation() 方法正在调用不带参数的 add()、subtract()、multiply() 和 divide(),但您已将这些方法定义为每个方法采用 2 位数字。我假设您想让 getNumber() 在这里工作,但 getNumber 目前只是定义 2 位数字,然后什么都不做。这是至少让它编译的一种方法:
public static void Operation(int response)
{
int digit1 = getNumber();
int digit2 = getNumber();
switch(response)
{
case 1: add(digit1, digit2); break;
case 2: subtract(digit1,digit2); break;
case 3: multiply(digit1,digit2); break;
case 4: divide(digit1,digit2); break;
default: System.out.println("Invalid Response");
}
}
public static int getNumber()
{
try
{
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
return num.nextInt();
}
catch(NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
return 0;
}
}
到目前为止,我已经能够制作方法并允许用户立即退出。我遇到的麻烦是....
- 让用户select进行运算(加、减、乘、除)
- 有选择操作的方法
- 然后继续执行 getNumber 语句和不同的操作
编辑:感谢 dawner 在 getNumber 方面的帮助,我欠你的 这是我目前所拥有的
import java.util.*;
import java.security.*;
public class Project6
{
public static void main(String[] args)
{
boolean Go = true;
while(Go)
{
Scanner input = new Scanner(System.in);
System.out.println("Choose an operation");
System.out.println("1 for Addition");
System.out.println("2 for Subtraction");
System.out.println("3 for Multiplication");
System.out.println("4 for Division");
System.out.println("5 to Quit");
int response=input.nextInt();
if(response == 5)
{
System.out.print("You have quit the calculator");
Go = false;
}
Operation(response);
}
}
public static void Operation(int response)
{
switch(response)
{
case 1: add(); break;
case 2: subtract(); break;
case 3: multiply(); break;
case 4: divide(); break;
default: System.out.println("Invalid Response");
}
}
public static void getNumber()
{
try
{
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
int digit1;
digit1 = num.nextInt();
int digit2;
digit2 = num.nextInt();
}
catch(NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
}
}
public static void add(int digit1, int digit2)
{
Scanner input = new Scanner(System.in);
int sum;
sum = digit1 + digit2;
System.out.println("What is " + digit1 + " + " + digit2 + " ?");
int ans;
ans = input.nextInt();
if(ans == sum)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
public static void subtract(int digit1, int digit2)
{
Scanner input = new Scanner(System.in);
if(digit2 > digit1)
{
int temp = digit1;
digit1 = digit2;
digit2 = temp;
}
int diff = digit1 - digit2;
System.out.println("What is " + digit1 + " - " + digit2 + " ?");
int ans;
ans = input.nextInt();
if(ans == diff)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
public static void multiply(int digit1, int digit2)
{
Scanner input = new Scanner(System.in);
int product = digit1 * digit2;
System.out.println("What is " + digit1 + " * " + digit2 + " ?");
int ans = input.nextInt();
if(ans == product)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
public static void divide(int digit1, int digit2)
{
int quotient;
quotient = digit1 / digit2;
int remainder = digit1 % digit2;
if(digit2 > digit1)
{
int temp = digit1;
digit1 = digit2;
digit2 = temp;
}
if(remainder == 0)
{
Scanner input = new Scanner(System.in);
System.out.println("What is " + digit1 + " / " + digit2 + " ?");
int ans = input.nextInt();
System.out.println("What is the remainder?");
int remainAns = input.nextInt();
if(ans == quotient && remainAns == remainder)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
else
{
Scanner input = new Scanner(System.in);
System.out.println("What is " + digit1 + " / " + digit2 + " ?");
int ans;
ans = input.nextInt();
if(ans == quotient)
{
correctPrompt();
}
else
{
incorrectPrompt();
}
}
}
public static void correctPrompt()
{
try
{
String response;
response = "";
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
int randResponse;
randResponse = num.nextInt(4);
switch(randResponse)
{
case 0: response = "Excellent!"; break;
case 1: response = "Nice Work!"; break;
case 2: response = "Right - you rock"; break;
case 3: response = "Well Done"; break;
}
System.out.println(response);
}
catch (NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
}
}
public static void incorrectPrompt()
{
try
{
String response= "";
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
int randResponse;
randResponse = num.nextInt(4);
switch(randResponse)
{
case 0: response = "No, please try again"; break;
case 1: response = "Oopsie! You are SO close!"; break;
case 2: response = "Don't give up - you can do this"; break;
case 3: response = "Promime no fumigare - Close, but no cigar"; break;
}
System.out.println(response);
}
catch (NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
}
}
}
我能看到的最大问题是您的 Operation() 方法正在调用不带参数的 add()、subtract()、multiply() 和 divide(),但您已将这些方法定义为每个方法采用 2 位数字。我假设您想让 getNumber() 在这里工作,但 getNumber 目前只是定义 2 位数字,然后什么都不做。这是至少让它编译的一种方法:
public static void Operation(int response)
{
int digit1 = getNumber();
int digit2 = getNumber();
switch(response)
{
case 1: add(digit1, digit2); break;
case 2: subtract(digit1,digit2); break;
case 3: multiply(digit1,digit2); break;
case 4: divide(digit1,digit2); break;
default: System.out.println("Invalid Response");
}
}
public static int getNumber()
{
try
{
SecureRandom num = SecureRandom.getInstance("SHA1PRNG");
return num.nextInt();
}
catch(NoSuchAlgorithmException nsae)
{
System.out.println("Is SHA1PRNG spelled correctly?");
return 0;
}
}