2016-03-19 5 views
0

Ich versuche, ein Spiel von Hex zu implementieren, unter Verwendung einiger Schnittstellen, die mir gegeben wurden. Ein Teil der Implementierung benachrichtigt den Benutzer und das Programm, dass ein Spieler versucht hat, ein Stück auf eine Brettkoordinate (eine 2D-Array-Liste) zu setzen, die bereits ein Stück enthält. Dies gilt als illegaler Schachzug. Daher versuche ich, die Ausnahme innerhalb meiner placePiece() -Methode abzufangen, die ein Stück bestimmten Koordinaten zuordnet. Stück ist eine aufgezählte Klasse, die drei Elemente enthält: BLAU, ROT, UNSET. Anfangs habe ich das Board auf UNSET gesetzt. Ich brauche die Methode, um den Benutzer und das System einer PositionAlreadyTakenException zu benachrichtigen, sollten die Koordinaten etwas anderes Piece.UNSET enthalten. Kann mir jemand helfen, dies zu tun, wenn die Methode gerade zur letzten Rückkehr übergeht? Codezeile? HierAbfangen eines Fehlers innerhalb einer Methode, die einen booleschen Rückgabetyp hat

ist der Code für meine makeMove() -Methode:

public boolean placePiece(Piece colour, MoveInterface move) throws PositionAlreadyTakenException, InvalidPositionException, InvalidColourException 
{ 
     int x = move.getXPosition(); 
     int y = move.getYPosition(); 

     try { 
     if(this.board [y-1][x-1] == Piece.UNSET){ 
     this.board[y-1][x -1] = colour; 
     return true; 
     } 

    } catch (Exception e){ 
     return false; 
    }  
    return true; 
} 
+0

Also statt eines 'try catch' wollen Sie haben und' if else' Das sagen 'if (this.board [......] blah) {gibt Zeug zurück wahr;} else {löst PositionAlreadyTakenException; } ' – 3kings

Antwort

0

Ich denke, Sie suchen etwas wie dieses

public boolean placePiece(Piece colour, MoveInterface move) throws PositionAlreadyTakenException, InvalidPositionException, InvalidColourException 
{ 
     int x = move.getXPosition(); 
     int y = move.getYPosition(); 

     try { 
     if(this.board [y-1][x-1] == Piece.UNSET){ 
     this.board[y-1][x -1] = colour; 
     return true; 
     } 

    } catch (Exception e){ 
     SOPL ("error" + e.getMessage(); 
    }  
    return false; 
} 
+0

Was bedeutet' SOPL'? – blafasel

+0

System out println, sorry schlechte Angewohnheiten – john

0

Versuchen catch (Throwable t) statt.

Aber es ist immer noch schlechter Stil. Eine Ausnahme sollte nur in Ausnahmesituationen ausgelöst werden. Ein bereits beanspruchter Ort ist die Anwendungslogik.

Verwandte Themen