Не уверен, почему я получаю исключение при попытке вызвать мой метод - PullRequest
0 голосов
/ 23 января 2012

Хорошо, поэтому я должен разместить на борту линкор, используя исключения, чтобы убедиться, что правила не нарушены. Тем не менее, когда я пытаюсь вызвать функцию, я получаю это:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type Exception
    at BattleshipBoard.main(BattleshipBoard.java:135)

Не уверен на 100%, что я делаю неправильно, если бы вы, ребята, могли определить, что не так, и связанное с этим правило, которое я, по-видимому, нарушаю, было бы очень признательно.

вот соответствующий код:

public void placeShip(int startCol, int startRow, int endCol, int endRow)
        throws Exception {
            if(startCol > numCols) {
                throw new Exception("0");
            }
            if(startCol < 0 ) {
                throw new Exception("Out of bounds, less than 1(startCol)");
            }
            if (startRow > numRows) {
                throw new Exception("Out of bounds, Greater then numRows");
            }
            if (startRow < 0) {
                throw new Exception("Out of bounds, less than 1 (startRow)");
            }
            if((startCol != endCol) && (startRow != endRow)){
                throw new Exception("Diag");
            }
            if(board[i][j] == 1){
                throw new Exception("Overlap");
            }
            if (startCol == endCol){
                for (i = startCol; i <= endCol; i++ ){
                    board[i][j] = 1;
                }
            }
            if (startRow == endRow){
                for(j = startRow; j <= endRow; j++){
                    board[i][j] = 1;
                }
            }


}

public static void main(String args[]) {
    // You may leave this empty
    BattleshipBoard b = new BattleshipBoard(10, 10);
    b.placeShip(0, 0, 3, 0);
}

Ответы [ 4 ]

1 голос
/ 23 января 2012

Зачем вам эти циклы?

        if (startCol == endCol){
            for (i = startCol; i <= endCol; i++ ){
                board[i][j] = 1;
            }
        }
        if (startRow == endRow){
            for(j = startRow; j <= endRow; j++){
                board[i][j] = 1;
            }
        }

Если начальное значение равно конечному значению, цикл все равно будет выполняться только один раз.Просто сделайте:

board[startCol][j] = 1;
board[i][startRow] = 1;

Я также подозреваю, что в этой части кода вы получаете «исключение индекса массива за пределами границ».

1 голос
/ 23 января 2012

Java проверила исключения. сделать это:

try {
 b.placeShip(0, 0, 3, 0);
} catch(Exception e) {
System.err.println("error: "+e.getMessage());
}

Однако не рекомендуется использовать Exception. Лучше создавать свои собственные исключения, которые расширяют Exception Таким образом, вы можете соответственно обрабатывать различные нарушения правил.

1 голос
/ 23 января 2012

Проверенные исключения должны быть перехвачены или переброшены. Итак, у вас есть 2 варианта

  1. Объявите метод main (..) для исключения или
  2. sorround b.placeShip (...) с try-catch
1 голос
/ 23 января 2012

Вы не обрабатываете исключение, которое может выдать placeShip. Вы должны разместить вызов placeShip внутри блока try

try{
b.placeShip(0, 0, 3, 0);
}
catch(Exception x){
// take some action
}

Таким образом, если placeShip выдает исключение, ваша программа не просто аварийно завершает работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...