异常处理程序使变量不可用

Exception handler makes variable unusable

这是我的一段代码:

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 从下面 catch 到整个代码结束的变量都被标记为红色,并且写着:"spieler cannot be resolved as a variable"。但是在 try 和 catch 语句中没有错误。 我做错了什么?

PS:例外是 "NegativeArraySizeException"

在 try 块外声明 'spieler' 变量。

Variables declared inside try block can be accessible within block only.So declare the variable out of try block and assign it in try block.

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

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();

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

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