布尔方法没有返回正确值的问题
Problem with boolean method not returning the right value
我正在处理作业的优先级队列,我需要调用另一个 class 的方法来识别单词是否以元音、字母或其他字符开头。我已经在 class 的内部和外部测试了它们,但是当我输入一个使用 toString() 将对象转换为字符串的临时变量时,它似乎只不起作用。出于某种原因,startsWithVowel 始终 returns false 和 startsWithLetter 始终 returns 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++;
}
}
正如我之前所说,我可以在其他 classes 中调用这两种方法,但只有在上面的代码行中它才不会 return 正确的值。当我在主 class 中测试它时,即使我可以在实际 class 中测试相同的词,但每个输入都以优先级 2 出现,并且它 return 是正确的值。
编辑:
所以问题是 toString() 将对象转换为表示 "hw4.WordPriorityQueue$Node@16f65612" 的字符串。我需要做什么来重写 toString() 来说明我要放入对象中的内容?
我想你想回来,newEntry
里有什么。如果 Node
是内置的 class,则 toString()
可能 return 与其他东西有关。 (虽然我没有检查过这个具体案例。)您可以尝试打印出 newNode.toString()
的 return 值。 (或检查 documentation/implementation。)
您需要覆盖 Node
class 中的 toString()
方法。否则它将总是 return 类似 Node@4c203ea1
的东西,它只是 class 的名称及其哈希码。
你也可以像这样让你的方法更优雅一点:
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));
}
我正在处理作业的优先级队列,我需要调用另一个 class 的方法来识别单词是否以元音、字母或其他字符开头。我已经在 class 的内部和外部测试了它们,但是当我输入一个使用 toString() 将对象转换为字符串的临时变量时,它似乎只不起作用。出于某种原因,startsWithVowel 始终 returns false 和 startsWithLetter 始终 returns 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++;
}
}
正如我之前所说,我可以在其他 classes 中调用这两种方法,但只有在上面的代码行中它才不会 return 正确的值。当我在主 class 中测试它时,即使我可以在实际 class 中测试相同的词,但每个输入都以优先级 2 出现,并且它 return 是正确的值。
编辑: 所以问题是 toString() 将对象转换为表示 "hw4.WordPriorityQueue$Node@16f65612" 的字符串。我需要做什么来重写 toString() 来说明我要放入对象中的内容?
我想你想回来,newEntry
里有什么。如果 Node
是内置的 class,则 toString()
可能 return 与其他东西有关。 (虽然我没有检查过这个具体案例。)您可以尝试打印出 newNode.toString()
的 return 值。 (或检查 documentation/implementation。)
您需要覆盖 Node
class 中的 toString()
方法。否则它将总是 return 类似 Node@4c203ea1
的东西,它只是 class 的名称及其哈希码。
你也可以像这样让你的方法更优雅一点:
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));
}