我试图开始使用BufferedReader而不是Scanner。在编写codechef(SMRSTR)上的问题时,我尝试使用StringTokenizer获取空格分隔的输入,但它引发了异常,即NumberFormatException。我在StackOverflow上发现了一些关于它的问题,但我认为我的问题不同,所以我发布了一个。 输入:1 2 3 2 3 5 100 8
我正进入(状态:
线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“2 3” at java.lang.NumberFormatException.forInputString(Unknown Source) 在java.lang.Integer.parseInt(未知来源) 在java.lang.Integer.parseInt(未知来源) 在A.main(A.java:11)
我从br.readLine();
正确地得到第一个输入但是接下来的输入n,q
给出了提到的异常。我认为问题出在StringTokenizer的nextToken中,但仍然没有清楚地说明。
这是代码:
import java.io.*;
import java.util.*;
class A{
public static void main(String arg[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer s = new StringTokenizer(br.readLine());
int t= Integer.parseInt(br.readLine());
while(t-->0)
{
int n,q,i;
n=Integer.parseInt(s.nextToken());
q=Integer.parseInt(s.nextToken());
int D[]= new int[n];
int Q[]=new int[q];
long x=1;
for(i=0;i<n;i++)
{
D[i]=Integer.parseInt(s.nextToken());
x=x*D[i];
}
for(i=0;i<q;i++)
{
Q[i]=Integer.parseInt(s.nextToken());
if(x>1000000000)
Q[i]=0;
else
Q[i]=(int)(Q[i]/x);
}
for(i=0;i<q;i++)
System.out.print(Q[i]+" ");
System.out.println("");
}
}
}
假设你的第一行是一个数字而你的第二行是一串空格分隔的数字(如果没有,用你的实际输入编辑你的问题)
我想你想以这种方式阅读t
:
int t = Integer.parseInt(s.nextToken());
然后将下一行读入您的标记器
s = new StringTokenizer(br.readLine());
while循环之前的代码应该是:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer s = new StringTokenizer(br.readLine());
int t = Integer.parseInt(s.nextToken());
s = new StringTokenizer(br.readLine());
编辑
在使用下一个Int方法之前,您需要读取tokenizer中的每一行。这应该工作。
输入:
1
2 3
2 3
5 100 8
输出:
0 16 1
工作代码:
public static void main(String arg[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// read first line in tokenizer
StringTokenizer s = new StringTokenizer(br.readLine());
//parse t
int t = Integer.parseInt(s.nextToken());
// read second line in tokenizer
s = new StringTokenizer(br.readLine());
while(t-->0) {
int n,q;
// parse n and q (2, 3)
n=Integer.parseInt(s.nextToken());
q=Integer.parseInt(s.nextToken());
int D[]= new int[n];
int Q[]=new int[q];
long x=1;
// read third line in tokenizer
s = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++) {
D[i]=Integer.parseInt(s.nextToken());
x=x*D[i];
}
// read fourth line in tokenizer
s = new StringTokenizer(br.readLine());
for(int i=0;i<q;i++) {
Q[i]=Integer.parseInt(s.nextToken());
if(x>1000000000)
Q[i]=0;
else
Q[i]=(int)(Q[i]/x);
}
for(int i=0;i<q;i++)
System.out.print(Q[i]+" ");
System.out.println("");
}
}