Почему l oop не ломается? - PullRequest
       6

Почему l oop не ломается?

0 голосов
/ 17 февраля 2020

Моя цель - распечатать данные координаты, если они находятся в допустимом формате. У меня есть вспомогательная функция isValid, чтобы проверить, является ли строка координатой или нет, и positionQuery запрашивает ввод данных пользователем, если isValid имеет значение false positionQuery выдает ошибку и снова запрашивает координаты, если это правда, она печатает координаты , Однако, что-то не так с моими логическими значениями или циклами, потому что я не получаю никакого вывода.

public static boolean validCoordinate(String coordinate, int dimension) {
        String [] alphabet = new String[dimension];
        for(int i = 0; i < dimension; i++) {
            alphabet[i] = Character.toString((char)(65 + i));
        }
        List<String> list = Arrays.asList(alphabet);
        int [] numbers = new int [dimension];
        for(int i = 0; i < dimension; i++){
            numbers[i] = 1 + i;
        }
            if(list.contains(Character.toString(coordinate.charAt(0)))) {
                for(int j = 0; j < dimension; j++) {
                    if ((coordinate.substring(1)).contains(Integer.toString(numbers[j]))) {
                        return true;
                    }
                }
            }

        return false;
    }



    public static String[] positionQuery(int dim, Scanner test_in) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Provide origin and destination coordinates.");
        System.out.println("Enter two positions between A1-H8:");
        while(true) {
            String line = scanner.nextLine();
            String[] coordinates = line.split(" ");
            if(coordinates.length == 2) {
                String origin = coordinates[0];
                String dest = coordinates[1];
                if(validCoordinate(origin, dim) && validCoordinate(dest,dim)) {
                    System.out.println(coordinates);
                }
            }
            else {
                System.out.println("ERROR: Please enter valid coordinate pair separated by space.");
            }

        }
    }

Было бы удивительно, если бы я мог видеть, что я делаю не так:)

1 Ответ

1 голос
/ 17 февраля 2020

Ваш метод называется validCoordinate (не isValid). И это слишком много кода для этого метода. Убедитесь, что есть два символа, убедитесь, что оба находятся в соответствующих диапазонах. Нет циклов, нет коллекций, нет массивов. Например,

public static boolean validCoordinate(String coordinate, int dim) {
    if (coordinate.length() == 2) {
        char a = coordinate.charAt(0);
        char b = coordinate.charAt(1);
        return a >= 'A' && a <= ('A' + dim) && b >= '1' && b <= ('1' + dim);
    }
    return false;
}

И System.out.println(coordinates); - это не то, как вы печатаете массив. Попробуйте

System.out.println(Arrays.toString(coordinates));

и , пожалуйста стоп , задав тот же вопрос . И прочитайте Как создать минимальный воспроизводимый пример .

...