0

元の質問

次の小さなコードでは、エラーが発生しています...

import java.io.*;

class test
{

    public static void main(String args[]) throws IOException 
    {

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int i;

        System.out.println("Enter no of processes ");

        int no_of_process=Integer.parseInt(br.readLine());
        int process[]=new int[no_of_process];

        System.out.println("Enter the values");

        for(i=0;i<no_of_process;i++)
            process[i]=Integer.parseInt(br.readLine());

        for(i=0;i<no_of_process;i++)
            System.out.println(process[i]); 

    }
}

入力:

Enter no of processes 
5
Enter the values
1
2
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at test.main(test.java:17)

Process completed.

私はコードを適切に書いたと思いますし、適切な整数入力も与えられています。明示的な例外処理ステートメントを使用せずに上記のエラーを取り除くにはどうすればよいですか?

さらに質問:

あなたの答えをありがとうみんな...それは働いています。しかし、私の心には1つの新しい質問があります。

コードに次の変更を加えて実行しました。驚いたことに、入力は実行時エラーなしで正しく受け入れられました。

for(i=0;i<no_of_process;i++)
    {
        System.out.println(Write anything or even keep it blank);
        process[i]=Integer.parseInt(br.readLine());
    }

for ループの入力ステートメントの前 (または後) に Print ステートメントを 1 つだけ追加することで、プログラムは正しく動作し、入力中に例外がスローされることはありませんでした。

この背後にある理由を説明できますか?

そこから Print ステートメントを削除すると、同じエラーが繰り返されます。この背後にある理由について、私は本当に混乱しています。助けてください。

4

3 に答える 3

2

エラー処理ステートメントはありませんか? 次のように、解析を試みる前に br.readLine() が "" を返しているかどうかを確認してください。

String line = br.readLine();
if(!String.isEmpty(line))
{
    //Do stuff
}
else
{
    //Do other stuff
}
于 2013-09-06T14:32:53.810 に答える
0

明示的な例外処理ステートメントを使用せずに上記のエラーを取り除く方法は?

for (i = 0; i < no_of_process; i++) {
    String input;
    do {
        input = br.readLine();
        if (isInteger(input)) {
            process[i]=Integer.parseInt(input);
        } else {
            //error handling here
            System.err.println("you entered an invalid input");
        }

    } while(isInteger(input));
}

isIntegerのようになります。

public static boolean isInteger(String s)
{
    try {
        Integer.parseInt(s);
    }
    catch (Exception e) {
        return false;
    }

    return true;
}

私は適切に書いたと思いますし、適切な整数入力も与えられています。

私はそうは思いません ;) 何も入力せずにリターンを押したと思います

于 2013-09-06T14:33:54.053 に答える