Исключение в потоке "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]);