Вы должны рассмотреть вариант выполнения l oop, поскольку вы хотите выполнить код один раз, независимо от того, выполнено ли условие. Затем в конце l oop вы можете проверить, выполнено ли условие. Если он не выполняется, он будет запущен снова. Например:
public static String[] positionQuery(int dim) {
boolean errorEncountered = false;
String[] coordinates;
Scanner stdin = new Scanner(System.in);
do {
if(errorEncountered)
System.out.println("ERROR: Please enter valid coordinate pair separated by space.");
else {
System.out.println("Provide origin and destination coordinates.");
System.out.println("Enter two positions between A1-H8:");
}
String s1 = stdin.nextLine();
coordinates = s1.split(" ");
String origin = coordinates[0];
String dest = coordinates[1];
if(!validCoordinate(origin, dim) || !validCoordinate(dest,dim) || coordinates.length != 2) //makes sure there's only 2 coords
errorEncountered = true;
else
errorEncountered = false;
} while (errorEncountered);
return coordinates;
}
В этом примере я взял на себя смелость удалить ввод Scanner test_in
, поскольку вы его не использовали.
Я также заметил, что вы возвращаете String[]
неправильно. Если вы просто хотите вернуть String[]
, сгенерированный split()
, вы должны вернуть эту переменную. Не создавать новый String[]
(см. Приведенный выше пример).
Этот l oop (как и все циклы) также может быть выполнен с while(true)
, который прерывается или возвращается для правильного условия. Тем не менее, это иногда считается плохой практикой (см. Являются ли циклы while (true) такими плохими? ), потому что когда вы учитесь писать более сложный код, связка break
или return
Это может сделать код очень запутанным и трудным для чтения. Таким образом, вам лучше привыкнуть к логическим значениям.