[英]String Tokenizer giving exception while taking space saperated values using BufferedReader
我試圖開始使用BufferedReader而不是Scanner。 在就代碼廚師(SMRSTR)的問題進行編碼時,我嘗試使用StringTokenizer接受空格分隔的輸入,但它引發了異常,即NumberFormatException 。 我在StackOverflow上發現了一個與此有關的問題,但我認為我的問題有所不同,因此我發布了一個問題。
輸入1
2 3
2 3
5 100 8
我正進入(狀態:
線程“主”中的異常java.lang.NumberFormatException:對於輸入字符串:“ 2 3”
在java.lang.NumberFormatException.forInputString(未知來源)
在java.lang.Integer.parseInt(未知來源)
在java.lang.Integer.parseInt(未知來源)
在A.main(A.java:11)
我從br.readLine();
得到正確的第一個輸入t 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方法之前,您需要閱讀令牌化程序中的每一行。 這應該工作。
輸入:
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("");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.