当前位置: 首页 > 知识库问答 >
问题:

同时循环:负输入检查和添加字符串的try catch

柴修筠
2023-03-14

我必须做一个计算器

>

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

    使用字符串输入(两个而不是2个)运行程序,使用try和cat显示一条消息,告诉用户错误,并询问用户是否想要循环。

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

    当我尝试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!");
    }
    

    如果没有尝试捕获,我不知道如何在不使用System.exit(0);不显示输出的情况下执行数字2。这结束了用户能够输入到循环。

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

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

    代码:

    package whileloopyn;
    
    import java.util.Scanner;
    
    public class Whileloopyn {
    
    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 and try catch for exception error (rate inputed as two)
    
        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 (negative then ask again)
        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));
    
        //output answer
        System.out.printf("The monthly payment is: $ %.2f%n", outputNum);
    
        //prompt user y n to run program again
        System.out.println("Would you like to calculate again (y/n): ");
        String loop = in.nextLine();
    
        //while loop with (input
    
        boolean isContinuing = true;
    
        while (isContinuing) {
            while(loop.equals("y")){
            System.out.print("Enter loan amount: ");
            loanNum = in.nextDouble();
    
            System.out.print("Enter rate: ");
            rateNum = in.nextDouble();
    
            System.out.print("Enter number years: ");
            yearNum = in.nextDouble();
    
            //Postive input data check (negative then loop again)
            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));
    
            //output answer
            System.out.printf("The monthly payment is: $ %.2f%n", outputNum);
            //ask user if you want to use program again
            System.out.printf("Would you like to calculate again (y/n): ");
    
            if(loop.equals("n"))
            {
                System.exit(0);
            }
        }
        }
    
    }
    
    }
    

    有人建议(input.equals(String))是我应该如何比较同时循环的字符串,并使用in.nextLine();


  • 共有1个答案

    乌甫
    2023-03-14

    如果用户按下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;
            }
    

    而不是而(loop.equals(y)){,你应该写而(true){,因为你已经在循环中检查过了

     类似资料:
    • 我得到未经检查的输入循环条件在下面的行在我的代码。 我提供了下面的解决方案,但检查马克斯扫描仍然显示相同的错误。 我也使用了getValidinteger()方法,但这两种方法似乎都没有解决这个问题。 这是循环--

    • 我有一个类,其中我们将“两个时态对象之间的时间量”存储到一个长变量monthBt中,并将其用作“for循环”中的测试表达式。然而,我在azure sechub中收到中级安全警告“未检查循环条件的输入”。 验证和删除警告的最佳方法是什么?谢谢

    • 我正在制作一个程序,它从用户那里获取一个字符串并用分隔符逐字分隔它,它几乎完成了。但是,在第一个完整循环之后,来自用户的下一个输入不会通过最后一个while循环。 下面是我要说的代码片段: 我想我需要在单词increment和print行周围再循环一次,并在输入中使用continue序列。hasNext()循环,因为这就是我使用int来运行类似程序的方式,但我不确定这将如何处理字符串。 有什么建议

    • 主要内容:字符串的输出,字符串的输入其实在《 C语言输入输出》一章中我们已经提到了如何输入输出字符串,但是那个时候我们还没有讲解字符串,大家理解的可能不透彻,所以本节我们有必要再深入和细化一下。 字符串的输出 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串。 printf():通过格式控制符输出字符串,不能自动换行。除了字符串,printf() 还能输

    • 我正在编写一个程序,将二进制数转换为十进制数,我只是一个新手程序员。我一直试图确定输入的字符串是二进制数,这意味着它只包含1和0。到目前为止,我的代码是: 也就是说,无论输入什么(然后退出),即使输入了二进制数,程序都会输出“您没有输入二进制数”。我确信我的if语句是错误的或我的字符声明是错误的,但是我已经尝试了我个人知道的一切来纠正这个问题,但我在网上找不到任何帮助。任何帮助都将不胜感激。

    • 我试图在PlayerOne类中放入一个while循环,这样就可以通过用户输入来选择玩家的职业。我不知道怎么让它起作用。你能给我一个建议或提示吗?谢谢!(我想你不需要玩家类或者主类,所以我就让他们置身事外)