Java 虽然循环不会重新运行程序,但若要再次循环,请仅请求
我试图提示用户输入Y,Y或N,N,并使用while循环询问他们是否要重新运行程序。我试过使用从问题开始工作的代码。我更改了字符串choice=sc.next();进入下一步();当我运行程序时,一切正常,但当出现提示并回答y时,它只会询问我是否想再次运行而不实际运行程序(让用户输入和输出答案)。n将很好地工作并结束它。谢谢你抽出时间!这让我在这里、youtube和其他编码论坛上花了很多晚上寻找答案 编辑:我尝试将贷款相关代码移动到while循环(while和boolean之间),但现在它完全跳过了“您想再次计算(y/n):”并直接进入“输入贷款金额:”而不询问Java 虽然循环不会重新运行程序,但若要再次循环,请仅请求,java,while-loop,Java,While Loop,我试图提示用户输入Y,Y或N,N,并使用while循环询问他们是否要重新运行程序。我试过使用从问题开始工作的代码。我更改了字符串choice=sc.next();进入下一步();当我运行程序时,一切正常,但当出现提示并回答y时,它只会询问我是否想再次运行而不实际运行程序(让用户输入和输出答案)。n将很好地工作并结束它。谢谢你抽出时间!这让我在这里、youtube和其他编码论坛上花了很多晚上寻找答案 编辑:我尝试将贷款相关代码移动到while循环(while和boolean之间),但现在它完全跳过
package numformexception;
import java.util.Scanner;
public class NumFormException {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//Declare Variables
double loanNum;
double rateNum;
double trateNum;
double yearNum;
double monthNum;
double equNum;
double outputNum;
//Prompt for input
System.out.print("Enter loan amount: ");
loanNum = Double.parseDouble(in.nextLine());
System.out.print("Enter rate: ");
rateNum = Double.parseDouble(in.nextLine());
System.out.print("Enter number years: ");
yearNum = Double.parseDouble(in.nextLine());
//Postive input data check
if(loanNum <= 0 || rateNum <=0 || yearNum <=0)
{
System.out.println("You must enter positive numeric data! ");
System.exit(0);
}
//Convert years to months
monthNum = yearNum * 12;
//Convert rate to percent and monthly
trateNum= (rateNum / 100) /12;
//Complete numerator
equNum = Math.pow((1+ trateNum), monthNum );
//Plug equNum into formula
outputNum = trateNum * loanNum * (equNum / (equNum - 1));
System.out.printf("The monthly payment is: $ %.2f%n", outputNum);
boolean isContinuing = true;
while( isContinuing) {
boolean inputIsInvalid = true;
while (inputIsInvalid) {
System.out.print("Would you like to calculate again (y/n): ");
String choice = in.next();
if("y".equalsIgnoreCase(choice)) {
inputIsInvalid = false;
}
else if("n".equalsIgnoreCase(choice)){
inputIsInvalid = false;
isContinuing = false;
}
else {
System.err.print("Error: Only valid answers are Y/N. ");
}
}
}
}
}
包numformexception;
导入java.util.Scanner;
公共类NumFormException{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
//声明变量
双贷款;
双速率;
双策略;
双重渴望;
双月;
双马;
双输出数;
//提示输入
系统输出打印(“输入贷款金额:”);
loanNum=Double.parseDouble(in.nextLine());
系统输出打印(“输入速率:”);
rateNum=Double.parseDouble(在.nextLine()中);
System.out.print(“输入年份:”);
deargenum=Double.parseDouble(in.nextLine());
//正向输入数据检查
如果(loanNum唯一将循环的代码是while循环中的代码。因此,没有任何与贷款相关的代码将循环是完全有意义的。如果要循环,必须首先将其放入循环中,很可能是在while继续while循环中,该循环应该将几乎所有内容都包含在主方法中,所有内容都包含在内在变量声明之后。您的主计算将不会再次运行,因为它不是此循环的一部分:
while (isContinuing) {
// ...
}
我建议将主要计算逻辑移到方法中,例如:
private static void calculateLoan(Scanner in) {
//Declare Variables
double loanNum;
double rateNum;
double trateNum;
double yearNum;
double monthNum;
double equNum;
double outputNum;
//Prompt for input
System.out.print("Enter loan amount: ");
loanNum = Double.parseDouble(in.nextLine());
System.out.print("Enter rate: ");
rateNum = Double.parseDouble(in.nextLine());
System.out.print("Enter number years: ");
yearNum = Double.parseDouble(in.nextLine());
//Postive input data check
if (loanNum <= 0 || rateNum <= 0 || yearNum <= 0) {
System.out.println("You must enter positive numeric data! ");
System.exit(0);
}
//Convert years to months
monthNum = yearNum * 12;
//Convert rate to percent and monthly
trateNum = (rateNum / 100) / 12;
//Complete numerator
equNum = Math.pow((1 + trateNum), monthNum);
//Plug equNum into formula
outputNum = trateNum * loanNum * (equNum / (equNum - 1));
System.out.printf("The monthly payment is: $ %.2f%n", outputNum);
}
感谢您的回复!我尝试将贷款相关代码移动到while循环中,但现在它完全跳过了“您想再次计算(y/n):”并直接进入“输入贷款金额”:不询问用户。@javafarmer:那么你做错了——while continue循环需要包含所有内容,包括inputIsInvalid while循环。你的错误向我表明,你没有在头脑中思考程序的重要一步,看它的逻辑是如何流动的。请现在就开始这样做是解决这一问题和所有未来问题的宝贵工具。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean isContinuing = true;
while (isContinuing) {
calculateLoan(in);
boolean inputIsInvalid = true;
while (inputIsInvalid) {
System.out.print("Would you like to calculate again (y/n): ");
String choice = in.next();
if ("y".equalsIgnoreCase(choice)) {
inputIsInvalid = false;
} else if ("n".equalsIgnoreCase(choice)) {
inputIsInvalid = false;
isContinuing = false;
} else {
System.err.print("Error: Only valid answers are Y/N. ");
}
}
}
}