Как решить java.lang.NumberFormatException: пустая строка

#java #arrays

#java #массивы

Вопрос:

приведенный ниже код продолжает выдавать java.lang.NumberFormatException: пустую строку, но я не могу понять причину, почему.

 import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Problem_S1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        int n;
        Double c=0.0, e=0.0;
        String number = null;
        Scanner s = new Scanner(System.in);
        List<Double> T = new ArrayList<Double>();
        List<Double> R = new ArrayList<Double>();
        String[] Q = new String[2] ;
        
        System.out.println("Enter the number of entries");
        n = s.nextInt();
        if(n<= 1) {
            System.out.println("The number of observations should be greater than one, Try again!");
            return;
        }
        else {
            System.out.println("Make sure that there is only one whitespace between each number on a line");
        }
        
        for(int i=0;i<=n;i  ) {
            number = s.nextLine();
            Q = number.split("\s");
            
            T.add(Double.parseDouble(Q[0]));
            R.add(Double.parseDouble(Q[1]));    
        }
        for(int i=0;i<=T.size();i   ) {
            for(int j=0;j<=R.size();j  ) {
                if(i==j) {
                    c= R.get(i)/T.get(i);
                    if(c>e){
                        e=c;
                    }
                }
                
            }
        }
        
        System.out.println(e);
        
    }

}
  

После ввода первого ввода я получаю println, но затем непосредственно всплывает ошибка. Я даже не могу ввести требуемые входные данные для массива строк Q. Это то, что происходит на консоли.

 Enter the number of entries
3
Make sure that there is only one whitespace between each number on a line
Exception in thread "main" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at ccc2020.Problem_S1.main(Problem_S1.java:35)
  

Ответ №1:

Это потому, что метод Scanner.nextInt не считывает символ новой строки в ваших входных данных, и поэтому вызов Scanner.nextLine возвращается после чтения этой новой строки.

Обходной путь заключается в том, что вы помещаете s.nextLine() после s.nextInt() .

Это хорошо объяснено по данной ссылке https://www.geeksforgeeks.org/why-is-scanner-skipping-nextline-after-use-of-other-next-functions