0

try-catch ブロックの後に宣言しようとしましたが、うまくいきs.next()ません! stry ブロック内にある場合にのみ、ドロップダウンが表示されます。

FNFE と IOE をスローしないため、Parsing 入力をひとまとめにしたり、適切なアクションをすべて try ブロックに入れたりしたくありません。ここで何ができますか?

public static void main(String[] args) 
      {
        // TODO Auto-generated method stub

        //Open file; file name specified in args (command line)
        try{
            FileReader freader = new FileReader(args[0]);
            Scanner s = new Scanner(freader);

        }catch(FileNotFoundException e){
            System.err.println("Error: File not found. Exiting program...");
            e.printStackTrace();
            System.exit(-1);
        }catch(IOException e){
            System.err.println ("Error: IO exception. Exiting...");
            e.printStackTrace();
            System.exit(-1);
        }
        // if i try to declare s.next() here it would not work
4

3 に答える 3

2

s. next()を使用したいのですが、機能しないと思います。

これを行うには、try/catch ブロックの外側で s を変数として宣言し、そこで null に設定します。次に、今割り当てた場所に割り当てますが、宣言は行いません。私の仮定が正しければ、問題は s がそのブロック内で宣言されているため、try/catch の外ではアクティブ変数ではなくなっていることです。

FileReader freader = null;
Scanner    s       = null;
try { freader = new FileReader(args[0]); // risk null pointer exception here
      s = new Scanner(freader);
    }
catch { // etc.
于 2012-11-22T02:34:18.680 に答える
1

Javaでは、変数は宣言されたブロックによってスコープが設定されます。スキャナーはブロックの内側に構築されているため、tryブロックの外側には表示されません。

このブロックの外で実際のスキャン操作を実行したい理由はありますか?Java 7では、一般的なイディオムは、try-with-resourcesパターンです。

try (Scanner s = new Scanner(new FileInputStream(file)) {
  //Do stuff...
}

これにより、スキャナーリソースが自動的に閉じられます。finally現状では、コードサンプルにブロックがないため、リークする可能性があります。

于 2012-11-22T02:45:14.197 に答える
1

クラスsのインスタンスである変数はブロックのみに限定されているためです。ブロックのからアクセスできるようにしたい場合は、try キャッチの外で宣言してください。Scannertrystry-catch

 Scanner s = null;
 try{
        FileReader freader = new FileReader(args[0]);
         s = new Scanner(freader);

    }catch(FileNotFoundException e){
        System.err.println("Error: File not found. Exiting program...");
        e.printStackTrace();
        System.exit(-1);
    }catch(IOException e){
        System.err.println ("Error: IO exception. Exiting...");
        e.printStackTrace();
        System.exit(-1);
    }
于 2012-11-22T02:34:48.087 に答える