0

我尝试开始使用 BufferedReader 而不是 Scanner。在为 codechef (SMRSTR) 上的问题进行编码时,我尝试使用 StringTokenizer 以空格分隔的输入,但它引发了异常,即NumberFormatException。我在 StackOverflow 上发现了一些关于它的问题,但我认为我的问题不同,所以我发布了一个。
输入:1
2 3
2 3
5 100 8

我正进入(状态:

线程“主”java.lang.NumberFormatException 中的异常:对于输入字符串:
java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer的“2 3” .parseInt(Unknown Source)
at A.main(A.java:11)

我正在正确地获得第一个输入 tbr.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("");
    }
}
}
4

1 回答 1

0

假设您的第一行是一个数字,而您的第二行是一串空格分隔的数字(如果不是,请使用您的实际输入编辑您的问题)

我想你想这样读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("");
    }
}
于 2017-12-29T07:59:47.560 回答