有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何验证用户输入的字符串?(爪哇)

我已经编辑了这个问题,但在程序的底部,我试图编写一个switch语句来验证一些代码。我试图要求用户输入Y/N以继续。如果输入Y,程序应重新启动。如果输入N,程序应结束。如果他们输入Z,他们将收到一条错误消息,并再次提示是否继续? 现在,如果我随机输入一封信,我会被送回数据输入区,我不知道为什么

我还注意到我的计算不正确。我假设这与我没有使用bigdecimal类有关。目前,如果我输入5.6作为百分比,它会自动假定为560%

我是Java新手,不幸的是,我正在挣扎。昨晚有人很好心地帮了我,没有明目张胆地给我答案,我很感激,因为这让我自己把事情搞清楚了

我非常感谢您的帮助,因为我在这门课上遇到了困难

import java.util.Scanner;
import java.text.NumberFormat;

public class LoanCalculator
{
    public static double getDoubleWithinRange(Scanner sc, String prompt, double min, double max) //validate double
    {
        double d = 0;
        boolean isValid = false;
        while(isValid == false)
        {
            System.out.println(prompt); //print prompt for double
            if (sc.hasNextDouble())
            {
                d = sc.nextDouble();

                if (d <= min) //if input <= minimum double
                {
                    System.out.println("Error! Number must be greater than " + min);
                    System.out.println();//print error grater than min double
                }
                else if (d >= max) // if input >= maximum double value 
                {
                    System.out.println("Error number must be less than " + max);
                    System.out.println();//print error less than max double value
                }
                else
                    isValid = true; //else double is valid
            }
            else
            {
                System.out.println("Error! Invalid decimal value.");
                System.out.println();
                sc.nextLine();
            }
        }

        return d; //return double
    }
    //validate integer
    public static int getIntWithinRange(Scanner sc, String prompt, int min, int max)
    {
        int i = 0;
        boolean isValid = false;
        while(isValid == false)
        {
            System.out.println(prompt); //print prompt for integer
            if (sc.hasNextInt())
            {
                i = sc.nextInt();

                if (i <= min) //if input <= minimum integer
                {
                    System.out.println("Error! Number must be greater than " + min);
                    System.out.println();//print error grater than min integer
                }
                else if (i >= max) // if input >= maximum integer value
                {
                    System.out.println("Error number must be less than " + max);
                    System.out.println();//print error less than max integer value
                }
                else
                    isValid = true; //else integer is valid
            }
            else
            {
                System.out.println("Error! Invalid integer value.");
                System.out.println();
                sc.nextLine();
            }
        }

        return i; //return integer
    }

    public static void main(String[] args)
    {
        System.out.println("Welcome to the loan calculator"); //welcome user to loan calculator
        Scanner sc = new Scanner(System.in); // create new scanner
        String choice = "y"; //start choice loop
        while (choice.equalsIgnoreCase("y"))
        {
            System.out.println();
            System.out.println("DATA ENTRY");
            double loanAmount = getDoubleWithinRange(sc, "Enter loan amount: ", 0.0, 1000000.0); //get user input for loanAmount
            //get user input for interestRate
            double interestRate = getDoubleWithinRange(sc, "Enter yearly interest rate: ", 0, 20);
            //get user input for years
            int years = getIntWithinRange(sc, "Enter number of years: ", 0, 100);
            int months = years * 12; // calculate years to months
            //calculate monthly payment
            double monthlyPayment = loanAmount * interestRate/ (1 - 1 / Math.pow(1 + interestRate, months));
            //import currency instance
            NumberFormat currency = NumberFormat.getCurrencyInstance();
            // import percent instance
            NumberFormat percent = NumberFormat.getPercentInstance();
            percent.setMinimumFractionDigits(1); //set fraction digits for percent
            System.out.println("RESULST"); //print results
            //print loanAmount
            System.out.println("Loan Amount: " + currency.format(loanAmount));
            //print interestRate
            System.out.println("Yearly interest rate: " + percent.format(interestRate));
            System.out.println("Number of years: " + years); //print years
            //print monthlyPayment
            System.out.println("Monthly payment: " + currency.format(monthlyPayment));

            boolean quit = false;
            do {
                System.out.println();
                System.out.println("Continue? (y/n): "); //prompt user to continue
                String userinput1 = sc.next();

                char choice1 = userinput1.toLowerCase().charAt(0); 
                switch (choice1) {
                    case 'y':
                        break;
                    case 'n':
                        // case n, do something here
                        quit = true;
                        break;
                    case ' ':
                        System.out.println("Error! This entry is required. Try again.");
                        break;
                    default:
                        System.out.println("Error! Entry must be 'y or 'n''");
                        break;
                }
            } while (!quit);
        }
    }
}

共 (3) 个答案

  1. # 1 楼答案

    你必须使用一个条件,这些都有形式

    if(someBooleanCondition){
      doSomething();
    }
    else{
      doSomethingElse();
    }
    

    在本例中,您将使用String.equals()函数作为布尔条件。NOT==因为这会给字符串带来奇怪的结果。所以你应该这样做

    String userInput = sc.next().toLowerCase();
    if(userInput.equals("y")){
     //Its yes, do something here
    }
    else if(userInput.equals("n")){
     //It's no, do something else
    }
    else{
      //Handle an invalid entry here
    }
    

    使该循环重复检查输入的一种方法是:

    while(true)
    String userInput = sc.next().toLowerCase();
    if(userInput.equals("y")){
     //Its yes, do something here
    break;
    }
    else if(userInput.equals("n")){
     //It's no, do something else
     break;
    }
    else{
      //Handle an invalid entry here
    }
    

    这将迫使用户继续输入内容,直到他们输入Y或N,如果您希望他们能够输入换行符以退出,或者您可以将其添加到循环中

  2. # 2 楼答案

    使用if语句

    choice =sc.next().toLowerCase();
    if(choice.equals("y"))
     {
      //
     }
    else
    if(choice.equals("n"))
     {
      //
     }
    else
    {
     //invalid input
    }
    
  3. # 3 楼答案

    像这样使用switch

    boolean quit = false;
    do{ // change your while by this
    
        // your own stuff here
    
    
        // then after all your program stuff
        boolean choiceIsOK = false;
        do{
        String userinput = sc.next();
        char choice = userinput.toLowerCase().charAt(0);
        switch(choice){
        case 'y':
            // case y, do nothing, you could even remove that case.
            choiceIsOK = true;
            break;
        case 'n':
            // case n, do something here
            choiceIsOK = false;
            quit = true;
            break;
        default:
            // error or warning
            System.out.println("Type Y or N to respectively continue or quit");
            break;
        }
        }while(!choiceIsOK);
    }while (!quit);
    

    在您的代码中,它将如下所示:

    public static void main(String[] args)
    {
    System.out.println("Welcome to the loan calculator"); //welcome user to loan calculator
    Scanner sc = new Scanner(System.in); // create new scanner
    //String choice = "y"; //start choice loop [no need for that line anymore]
    boolean quit = false; 
    do{
            System.out.println();
            System.out.println("DATA ENTRY");
            double loanAmount = getDoubleWithinRange(sc, "Enter loan amount: ", 
                    0.0, 1000000.0); //get user input for loanAmount
            //get user input for interestRate
            double interestRate = getDoubleWithinRange(sc, 
                    "Enter yearly interest rate: ", 0, 20); 
            //get user input for years
            int years = getIntWithinRange(sc, "Enter number of years: ", 0, 100); 
            int months = years * 12; // calculate years to months
            //calculate monthly payment
            double monthlyPayment = loanAmount * interestRate/
                    (1 - 1/Math.pow(1 + interestRate, months)); 
            //import currency instance
            NumberFormat currency = NumberFormat.getCurrencyInstance(); 
            // import percent instance
            NumberFormat percent = NumberFormat.getPercentInstance(); 
            percent.setMinimumFractionDigits(1); //set fraction digits for percent 
            System.out.println("RESULST"); //print results 
            //print loanAmount
            System.out.println("Loan Amount: " + currency.format(loanAmount)); 
            //print interestRate
            System.out.println("Yearly interest rate: " + percent.format(interestRate)); 
            System.out.println("Number of years: " + years); //print years
             //print monthlyPayment
            System.out.println("Monthly payment: " + currency.format(monthlyPayment)); 
    
    
            // then after all your program stuff
            boolean choiceIsOK = false;
                do{
    
                    System.out.println();
                    System.out.println("Continue? (y/n): "); //prompt user to continue 
                    String userinput1 = sc.next();
                        char choice1 = userinput1.toLowerCase().charAt(0);
                        switch(choice1){
                        case 'y':
                            // case y, do nothing, you could even remove that case.
                            choiceIsOK = true;
                            break;
                        case 'n':
                            // case n, do something here
                            choiceIsOK = true; // I fixed this
                            quit = true;
                            break;
                        default:
                            // error or warning
                            System.out.println("Type Y or N to respectively continue or quit");
                            break;
                        }
                    }while(!choiceIsOK);
    
        }while(!quit);
    
        }           
    }