Почему я получаю исключение java .lang.NumberFormatException? - PullRequest
0 голосов
/ 01 августа 2020

Это мой код:

import java.math.BigDecimal;
import java.util.Scanner;

public class Class2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String l = scanner.nextLine();
        BigDecimal b = null;
        
        if (l != null) {
            b = new BigDecimal(l); // this is 14 line
        }
        System.out.println(b);
    }
}

, и это исключение, которое я получаю:

Exception in thread "main" java.lang.NumberFormatException
    at java.math.BigDecimal.<init>(BigDecimal.java:497)
    at java.math.BigDecimal.<init>(BigDecimal.java:383)
    at java.math.BigDecimal.<init>(BigDecimal.java:809)
    at SomePackage.Class2.main(Class2.java:14)

Как это решить?

1 Ответ

0 голосов
/ 01 августа 2020

Ваш код работает для обычных числовых c входов, однако вам необходимо позаботиться о крайних случаях следующим образом:

Scanner scanner = new Scanner(System.in);
String l = "";
BigDecimal b = null;
boolean valid = false;
do {
     l = scanner.nextLine();
     l = l.trim();
     if (l != null && !l.isEmpty()) {
          try {
               b = new BigDecimal(l);
               valid = true;
          }catch(Exception e) {
               System.out.println("Invalid input.");
          }
     }else
          System.out.println("Empty input");
}while(!valid);
System.out.println(b);

Пример ввода / вывода:

s
Invalid input.

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