как мне проверить данные, которые пользователь вводит в java - PullRequest
0 голосов
/ 20 июня 2020

Я писал программу, в которой пользователь должен вводить двойное значение, но я хочу снова спросить пользователя, вводит ли он / она строковое значение.

Это мой код:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in); 
    double purchaseAmount = 0; 
    if (input.hasNext("mp")) { 
        do { 
            System.out.println("Enter your loan amount: ");
            purchaseAmount = input.next(); 
        } while(!input.hasNextDouble()); 
    }
}
    

Ответы [ 3 ]

0 голосов
/ 20 июня 2020

Если ввод, предоставленный пользователем, не соответствует ожидаемому формату, будет сгенерировано исключение, вы можете перехватить это исключение, чтобы снова запросить длинное значение.

    public static Long getLongInputFromUser(){
        Scanner sc= new Scanner(System.in);
        try {
            System.out.println("Print the long value: ");
            Long inputInteger = sc.nextLong();
            return inputInteger;
        }catch(InputMismatchException inputMismatchException){
            System.out.println("The input is not a valid long, please enter again");
            return getLongInputFromUser();
        }
    }

    public static void main(String[] args) {
        Long input = getLongInputFromUser();
        System.out.println("The final value is " + input);
    }

Результат этого программа:

Print the long value: 
abc 
The input is not a valid long, please enter again 
Print the long value: 
pqr 
The input is not a valid long, please enter again
Print the long value: 
6 
The final value is 6 
0 голосов
/ 20 июня 2020

Вы можете использовать Java механизм исключения

Scanner input=new Scanner(System.in);
double purchaseAmount;
while(true){
    try{
        System.out.println("please input a double value");
        purchaseAmount=input.nextDoble();
    }catch(Exception e){
        System.out.println("You input a string,not a double value");
    }
}
0 голосов
/ 20 июня 2020

Когда вы запрашиваете пользователя в Java (при условии, что вы используете System.in или JTextField), то, что вы читаете из пользовательского ввода, является текст.

Если вы хотите преобразовать текст в a double существует несколько подходов, но вы можете использовать:

do {
   String promptValue = prompt();
   NumberFormat nf = NumberFormat.getInstance();
   nf.setMaximumFractionDigits(16); // maximum for double
   Number num = nf.parse(promptValue):
} while (null == num);

Обратите также внимание на то, что вы можете запрашивать символ за символом и анализировать постепенно, поэтому вам не нужно снова запрашивать, а скорее отбрасывать все, что не соответствие. Это будет хорошо работать в Swing, или вы можете использовать jline3 , если вы действительно хотите усложнить задачу.

Чтобы узнать, как выполнять синтаксический анализ, посмотрите: https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...