簡體   English   中英

字符串令牌生成器在使用BufferedReader獲取空間分隔值時給出異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM