Исключение в потоке "main" java.lang.NumberFormatException: для входной строки: "" (я ввел цифры, но, кажется, прочитал пустую строку)

В этом разделе что-то не так:

BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String faaltu = cin.readLine();
String inp = cin.readLine();
String[] part = inp.split("\\s");

for(int k = 0; k < part.length; k++)
{
    System.out.println(part[k]);
}

obj.Smax = Integer.parseInt(part[0]);

Я дал следующий вклад:

2
4 12345
3 1234

Вот полный код:

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Codejam
{
    Codejam(){};
    static Codejam obj = new Codejam();
    int totalStanding = 0;
    int T;//no of test cases
    int[] S;// no of people at each given shyness level
    boolean[] standing;
    int Smax;
    int total = 0, newInv = 0;

    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        obj.T = Integer.parseInt(cin.readLine());
        for(int i = 0; i < obj.T; i++)
        {
            obj.populate();
            obj.update();
            while (obj.totalStanding < obj.total)
            {
                obj.newInv++;
                obj.S[0]++;
                obj.update();
            }
            System.out.println("Case #" + i + ": " + obj.newInv);
        }


    }

    public void update()
    {
        for(int i = 0;i < obj.S.length; i++)
        {
            if ((totalStanding >= i) && (obj.standing[i] == false) )
            {
                obj.totalStanding += obj.S[i];
                obj.standing[i] = true;
            }
        }
    }
    public void populate() throws IOException
    {
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        String faaltu = cin.readLine();
        String inp = cin.readLine();
        String[] part = inp.split("\\s");

        for(int k = 0; k < part.length; k++)
        {
            System.out.println(part[k]);
        }

        obj.Smax = Integer.parseInt(part[0]);
        obj.S = new int[Smax + 1]; 
        obj.standing = new boolean[Smax + 1];
        for(int j = 0;j < part[1].length(); j++)
        {
            obj.S[j] = part[1].charAt(j) - '0';
            obj.total += S[j];

        }

    }

}

и получил исключение

Исключение в потоке "main" java.lang.NumberFormatException: для входной строки: "" в java.lang.NumberFormatException.forInputString(неизвестный источник) в java.lang.Integer.parseInt(неизвестный источник) в java.lang.Integer.parseInt(Неизвестный источник) в Codejam.populate(Codejam.java:57) в Codejam.main(Codejam.java:24)

Пожалуйста, укажите, где я ошибся.

2 ответа

Решение

Мне кажется, что вы пытаетесь прочитать слишком много строк из вашего ввода.

Я подозреваю, что вы читаете за концом файла.

Я предлагаю вам пройти cin.readline () на ваш populate() Метод в качестве аргумента, поэтому вам не нужно открывать другого читателя.

Вы также не должны избегать своего выражения split так сильно, что я думаю, что в настоящее время оно читает "обратный слеш и s", а не "пробел".

Ошибка довольно очевидна, вы пытались разобрать по числу пустую строку, которая вызвала исключение.

Мы понятия не имеем, каков ваш вклад, но part[0] пустая строка, вызывающая ошибку:

obj.Smax = Integer.parseInt(part[0]);
Другие вопросы по тегам