我试图比较两个单独的堆栈,看看它们是否相同。我有一个循环遍历每个堆栈中的每个对象并比较两个对象。我想要发生的是如果它们相等,继续循环并返回true。如果它们在任何给定点不相等,则打破循环并返回false。这就是我写的:
public boolean isPalindrome (Stack a, Stack b) {
Object temp1;
Object temp2;
boolean answer;
for (int i = 0; a.size() > 0; i++) {
temp1 = a.pop();
temp2 = b.pop();
if (temp1 != temp2) {
answer = false;
}
else {
answer = true;
}
}
return answer;
}
我在这里看到的是我有一个布尔值,并且通过每个循环,boolean根据对象分配一个值,然后在循环结束时,返回该最近状态的布尔值。无论我将变量初始化为什么,它就像循环完全没有任何关系。你能不在循环中修改或返回一个布尔值?这个实例更好的方法是什么?我已经看过很多关于类似问题的其他帖子,但是大多数人似乎都尝试了一些不同的广告,我希望尽可能地坚持我原来的想法,我只需要知道我做错了什么。任何建议都会有很大帮助。谢谢!
答案 0 :(得分:1)
找到堆栈后,return false
(打破方法执行)的基本思路并不相同。否则return true
:
public boolean isPalindrome (Stack a, Stack b) {
if (a.size() != b.size()) {
return false;
}
while (a.size() > 0) {
if (!a.pop().equals(b.pop())) {
return false;
}
}
return true;
}
答案 1 :(得分:1)
public boolean isPalindrome (Stack a, Stack b) {
Object temp1;
Object temp2;
boolean answer = true;
for (int i = 0; a.size() > 0; i++) {
temp1 = a.pop();
temp2 = b.pop();
if (temp1 != temp2) {
answer = false;
break;
}
}
return answer;
}
答案 2 :(得分:1)
当您找到错误项目时,您需要放置return
语句 - 否则,您只需返回循环的最后一次迭代中找到的布尔值。
public boolean isPalindrome (Stack a, Stack b) {
Object temp1;
Object temp2;
boolean answer;
for (int i = 0; a.size() > 0; i++) {
temp1 = a.pop();
temp2 = b.pop();
if (temp1 != temp2) {
answer = false;
return answer;
}
else {
answer = true;
}
}
return answer;
}
答案 3 :(得分:1)
我的建议:
public boolean isPalindrome (Stack a, Stack b) {
if (a.size() != b.size()) return false;
while (a.size() > 0) {
if (a.pop() != b.pop()) {
return false;
}
}
return true;
}
答案 4 :(得分:0)
在answer设置为false之后,您应该将break语句放入。如果没有这个,只有在最后一项不相等时才返回false。
快速注意:我还会为两个堆栈大小不同的情况添加一个检查。