我一直遇到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();
答案 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
将是一些垃圾编号,可能非常大。