Проблема с логическим методом, не возвращающим правильное значение - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю над приоритетной очередью для своей домашней работы, и мне нужно вызвать методы из другого класса, чтобы определить, начинается ли слово с гласной, буквы или другого символа. Я проверил их внутри и вне класса, но, кажется, он не работает, только когда я ввожу временную переменную, которая использует toString () для преобразования и возражения в строку. По какой-то причине StartWithVowel всегда возвращает false, а StartWithLetter всегда возвращает true.

public static boolean startsWithVowel(String input) {
    char W = input.charAt(0);
    if ((W == 'a') || (W == 'e') || (W == 'i') || (W == 'o') || (W == 'u') || (W == 'A') || (W == 'E') || (W == 'I') || (W == 'O') || (W == 'U')) {
        return true;
    }
    else {
        return false;
    }
}

public static boolean startsWithLetter(String input) {
    char W = input.charAt(0);
    if ((W == 'a')|| (W == 'b') || (W == 'c') || (W == 'd') || (W == 'e') || (W == 'f') || (W == 'g') || (W == 'h') || (W == 'i') || (W == 'j') || (W == 'k') || (W == 'l') || (W == 'm') || (W == 'n') || (W == 'o') || (W == 'p') || (W == 'q') || (W == 'r') || (W == 's') || (W == 't') || (W == 'u') || (W == 'v') || (W == 'w') || (W == 'x') || (W == 'y') || (W == 'z') || (W == 'A')|| (W == 'B') || (W == 'C') || (W == 'D') || (W == 'E') || (W == 'F') || (W == 'G') || (W == 'H') || (W == 'I') || (W == 'J') || (W == 'K') || (W == 'L') || (W == 'M') || (W == 'N') || (W == 'O') || (W == 'P') || (W == 'Q') || (W == 'R') || (W == 'S') || (W == 'T') || (W == 'U') || (W == 'V') || (W == 'W') || (W == 'X') || (W == 'Y') || (W == 'Z')) {
        return true;
    }
    else {
        return false;
    }
}

public void enqueue(Word newEntry,int prio) {
        Node<Word> newNode = new Node<Word>(newEntry,prio);
        String temp = newNode.toString();

        if (Words.startsWithLetter(temp)) {
            if (Words.startsWithVowel(temp)) {
                newNode.setPriority(1);
            }
            else {
                newNode.setPriority(2);
            }
        }
        else {
            newNode.setPriority(3);
        }
        if(isEmpty()) {
            firstNode = newNode;
            lastNode= newNode;
            numberOfElements++;
        }
        else {
            // if (newNode.getPriority()) {}
             lastNode.setNext(newNode);
             lastNode = newNode;
             numberOfElements++;
        }
}

Как я уже говорил, я могу вызывать оба метода в других классах, но только в приведенной выше строке кода он не возвращает правильные значения. Когда я проверяю его в своем основном классе, каждый вход имеет приоритет 2, хотя я могу проверить те же слова в реальном классе, и он возвращает правильные значения.

РЕДАКТИРОВАТЬ: Таким образом, проблема заключается в преобразовании toString () объект к строке, которая говорит "hw4. WordPriorityQueue$Node@16f65612". Что мне нужно сделать, чтобы переопределить toString (), чтобы сказать, что я помещаю в объект?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Полагаю, вы хотели бы вернуться, что в newEntry. toString(), вероятно, возвращается с чем-то другим, если Node является встроенным классом. (Хотя я не проверял в этом конкретном случае c.) Вы можете попытаться распечатать возвращаемое значение newNode.toString(). (Или проверьте документацию / реализацию.)

0 голосов
/ 25 апреля 2020

Вам необходимо переопределить метод toString() в вашем классе Node. В противном случае он всегда будет возвращать что-то вроде Node@4c203ea1, которое является просто именем класса и его хеш-кодом.

Также вы можете сделать ваши методы немного более элегантными, например:

public static List<Character> vowels = Arrays.asList('a','e','i','o','u','A','E','I','O','U');
public static boolean startsWithVowel(String input) {
    return vowels.contains(input.charAt(0));
}
...