当前位置: 首页 > 知识库问答 >
问题:

线程“main”java中出现异常。lang.NumberFormatException:对于输入字符串:“”(我输入了数字,但它似乎读取了一个空字符串)

白越
2023-03-14

这一节有问题:

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。java上的forInputString(未知源代码)。整型。java上的parseInt(未知源代码)。整型。Codejam处的parseInt(未知源)。在Codejam中填充(Codejam.java:57)。main(Codejam.java:24)

请指出我哪里出错了。

共有2个答案

能逸清
2023-03-14

在我看来,你试图从输入中读取太多的行。

我怀疑你在读文件的结尾。

我建议你通过考试。readline()将populate()方法作为参数,这样就不必打开另一个读卡器。

你也不应该如此严重地逃避你的分裂表达,我认为它现在读的是“反斜杠和s”,而不是“空白”。

裴硕
2023-03-14

错误很明显,您试图解析一个空字符串到一个抛出异常的数字。

我们不知道你的输入是什么,但是part[0]是导致错误的空字符串:

obj.Smax = Integer.parseInt(part[0]);
 类似资料: