Java While循环:负输入检查和添加字符串的try-catch

Java While循环:负输入检查和添加字符串的try-catch,java,while-loop,try-catch,Java,While Loop,Try Catch,我得做一个能用的计算器 使用正数输入运行程序,显示输出并询问用户是否要循环 使用字符串输入(2而不是2)运行程序,使用try和catch显示一条消息,告诉用户错误,并询问用户是否希望循环 使用负数输入运行程序,在不显示输出的情况下显示错误消息,并询问用户是否要循环 当我尝试catch时,对于try catch之后的变量,我得到的变量尚未初始化 try { System.out.print("Enter loan amount: "); loanNum = Double.parse

我得做一个能用的计算器

  • 使用正数输入运行程序,显示输出并询问用户是否要循环

  • 使用字符串输入(2而不是2)运行程序,使用try和catch显示一条消息,告诉用户错误,并询问用户是否希望循环

  • 使用负数输入运行程序,在不显示输出的情况下显示错误消息,并询问用户是否要循环

  • 当我尝试catch时,对于
    try catch
    之后的变量,我得到的
    变量尚未初始化

    try {
        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());
    }
    catch(NumberFormatException e) { 
        System.out.println ("You must enter positive numeric data!");
    }
    
    没有
    try catch
    我不知道如何在没有
    系统的情况下执行第2步。退出(0)不显示输出。这就使得用户能够输入到循环中

    我不知道如何修复我的while循环。当我运行程序时,它只运行一次,然后循环一次。之后,它将自动循环,无需提示,并在一行上吐出行,如:

    Would you like to calculate again (y/n):
    Enter loan amount:
    
    代码:

    package whileloopyn;
    导入java.util.Scanner;
    公共类Whileloopyn{
    公共静态void main(字符串[]args){
    扫描仪输入=新扫描仪(系统输入);
    //声明变量
    双贷款;
    双速率;
    双策略;
    双重渴望;
    双月;
    双马;
    双输出数;
    //提示输入并尝试捕获异常错误(输入率为2)
    系统输出打印(“输入贷款金额:”);
    loanNum=Double.parseDouble(in.nextLine());
    系统输出打印(“输入速率:”);
    rateNum=Double.parseDouble(在.nextLine()中);
    System.out.print(“输入年份:”);
    deargenum=Double.parseDouble(in.nextLine());
    //正输入数据检查(负,然后再次询问)
    
    如果(loanNum如果用户按下
    Y
    您必须继续该循环:

            System.out.printf("Would you like to calculate again (y/n): ");
            Scanner s = new Scanner(System.in);
            if(s.nextLine().equalsIgnoreCase("y")) {
                continue;
            } else {
                break;
            }
    

    你应该写
    while(loop.equals(“y”){
    ,而不是
    while(true){
    ,因为你已经在这个循环中检查过,如果你问用户,你实际上需要得到输入,而不是直接进入if条件。你还需要在使用任何
    nextFoo
    (不包括
    nextLine
    )方法,通过调用
    nextLine
    。作为此检查的参考
            System.out.printf("Would you like to calculate again (y/n): ");
            Scanner s = new Scanner(System.in);
            if(s.nextLine().equalsIgnoreCase("y")) {
                continue;
            } else {
                break;
            }