异常处理程序使变量无法使用

时间:2015-04-16 08:11:30

标签: java exception-handling

这是我的一段代码:

if (1 == wahl)
    do{
        // Anzahl Spieler
        int anzahlSpieler = IOTools.readInteger("Geben Sie Anzahl Spieler  ein: ");
        Spieler[] spieler = new Spieler[anzahlSpieler];

        for ( int j = 0; j < anzahlSpieler; j++) {
            spieler[j] = new Spieler("aktueller Spieler "+j);
        }

        Wuerfel wuerfelWurf = new Wuerfel();

现在,当我添加一个异常处理程序时,如下所示:

if (1 == wahl)
    do{
        // Anzahl Spieler
        int anzahlSpieler = IOTools.readInteger("Geben Sie Anzahl Spieler  ein: ");
        try{
            Spieler[] spieler = new Spieler[anzahlSpieler];
        } catch (NegativeArraySizeException e){
            System.err.print("Unzulaessige Eingabe: +    e.getMessage());
        }

        for ( int j = 0; j < anzahlSpieler; j++) {
            spieler[j] = new Spieler("aktueller Spieler "+j);
        }

        Wuerfel wuerfelWurf = new Wuerfel();

从下面捕获的每个spieler变量直到整个代码的末尾都标记为红色并且写了:&#34; spieler无法解析为变量&#34;。但是try和catch语句没有错误。 我做错了什么?

PS:异常是&#34; NegativeArraySizeException&#34;

3 个答案:

答案 0 :(得分:2)

从try块中声明'spieler'变量。

  

在try块中声明的变量只能在块内访问。所以从try块中声明变量并在try块中分配它。

答案 1 :(得分:0)

该变量仅在try块的范围内是已知的。 你应该在try块之外宣布他,然后就可以了......

答案 2 :(得分:0)

if (1 == wahl)                 
    do{
       // Anzahl Spieler
          int anzahlSpieler = IOTools.readInteger("Geben Sie Anzahl Spieler  ein: ");
          Spieler[] spieler;  //declare variable outside try block so it is accessible
          try{
               spieler = new Spieler[anzahlSpieler];  //initialize the variable here to catch any exceptions
          }

          catch (NegativeArraySizeException e){
               System.err.print("Unzulaessige Eingabe: +    e.getMessage());
          }

          for ( int j = 0; j < anzahlSpieler; j++)
          {
                spieler[j] = new Spieler("aktueller Spieler "+j);
          }

          Wuerfel wuerfelWurf = new Wuerfel();

块中声明的变量是该块的局部变量。它在该块之外没有存在。因此,您无法访问spieler块之外的try变量。

以上代码将解决您的问题。但是,如果您想要访问spieler块之外的if变量,则需要在if块之前声明它。