Я не могу понять, почему мой while l oop повторяется два раза, а не один раз - PullRequest
1 голос
/ 02 августа 2020

Довольно прямой вопрос. Я пытаюсь получить это, пока l oop повторяется только 1 раз, чтобы отобразить либо желоб, либо лестницу. Но после выполнения он проходит через l oop два раза. РЕДАКТИРОВАТЬ: У меня также есть заранее реализованный for l oop с теми же результатами.

public static String writeLogFile(String filename, int[] gameBoard) {
  File fileStream = null;
  PrintWriter outputFile = null;
  String logFileName = null;
  int i = 0;
  
  try {
     logFileName = filename.replace(".", "_log.");
     
     fileStream = new File(logFileName);
     outputFile = new PrintWriter(fileStream);
     
     while(gameBoard.length > i) {
        if(gameBoard[i] > 0) {
           System.out.println("Ladder at square " + i);
        } 
        else if(gameBoard[i] < 0) {
           System.out.println("Chute at square " + i);
        }
        ++i;
     }
  } 
  catch(FileNotFoundException b) {
     logFileName = "null";
     System.out.println("ERROR! Cannot create log file.");
  }
  
  outputFile.close();
  
  return logFileName;

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Кажется, что вы вызываете метод writeLogFile() дважды, потому что сам метод выполняет итерацию один раз по всему массиву gameBoard.

У меня есть инструкция, чтобы определить, возвращает ли этот метод исключение , и использовал его в переключателе if в основном методе. Огромное спасибо. Теперь как определить, вызывает ли этот метод исключение.

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

public static String writeLogFile(String filename, int[] gameBoard) throws FileNotFoundException {
    // ...
}

Тогда вы можете перехватить исключение в основном методе.

0 голосов
/ 02 августа 2020

Если длина gameBoard больше 1, while-l oop будет продолжать выполняться, пока не будет завершено. Если вы хотите, чтобы он выполнялся только один раз при нахождении лестницы или шута, вам нужно break.

     while(gameBoard.length > i) {
        if(gameBoard[i] > 0) {
           System.out.println("Ladder at square " + i);
           break;
        } else if(gameBoard[i] < 0) {
           System.out.println("Chute at square " + i);
           break;
        }
        ++i;
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...