为什么会出现NumberFormatException?

时间:2017-11-22 00:57:21

标签: java loops

我一直遇到NumberFormatException的问题。 readLine存在问题,因为我在错误的时间读错了行。我正在编写一个程序,该程序可以获取一个人拥有的金额,然后计算他们向其他人捐赠一些钱后会有多少钱。

可以在下面的链接中找到所有问题。

http://train.usaco.org/usacoprob2?a=RX1a1QYsOyX&S=gift1

    BufferedReader f = new BufferedReader(new FileReader("gift1.in"));
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("gift1.out")));

    int ppl = Integer.parseInt(f.readLine());
    out.println(ppl);

    HashMap<String, Integer> name = new HashMap<String, Integer>(); 
    String[] names = new String[ppl];
    for(int i = 0; i < ppl; i++ ){
        String n = f.readLine();
        names[i] = n; 
        name.put(n, 0);

    }
    for (int i = 0; i < ppl; i++){
        String person = f.readLine(); 

        StringTokenizer st = new StringTokenizer(f.readLine());
            int mon_lost = Integer.parseInt(st.nextToken());
            int ppl_given = Integer.parseInt(st.nextToken());



        name.put(person, (mon_lost%ppl_given)-mon_lost); 

        for(int j =0; j< ppl_given-1; i++){
            name.put(f.readLine(), mon_lost/ppl_given);
        }   

    }
    for(int i = 0; i < ppl; i++){

        out.println(names[i] +" "+ name.get(names[i]));
    }
    f.close();
    out.close();

2 个答案:

答案 0 :(得分:0)

不是BufferedReader。您可以使用BufferedReader.readLine()每秒读取数百万行。这是你的代码。

例如,f.read()来电不正确。它们将提供字符值,而不是数字值,并且从下一行开始,而不消耗行终止符,因此您将在readLine()后面得到一个空白行,这样您将完全与输入不同步。

基本上你的代码还没有工作,所以现在计时是徒劳的。

答案 1 :(得分:-1)

您的第一个for循环可能正在使用错误的值进行测试。

而不是:

for(int i = 0; i < ppl-1; ++i ) {

尝试使用:

for(int i = 0; i < ppl; ++i ) {

[UPDATE]

由于在此循环中循环次数过多,后续循环将不恰当地使用剩余的输入数据。例如,ppl_given将是一些垃圾编号,可能非常大。