gpt4 book ai didi

java - Stack.peek() 比较返回错误结果 -1024

转载 作者:行者123 更新时间:2023-12-02 10:50:27 25 4
gpt4 key购买 nike

我拿了两堆s1s2 ,用一些值初始化它们,最终,两者都有 -1024如那里top .

现在,如果我比较 if 中两者的 View 条件,结果是错误的。例如:

if (s1.peek() == s2.peek()) --> returns false

即使两个 View 都有 -1024作为值。

但是

如果我获取不同变量中的值,然后进行比较,效果就很好。例如:

int first = s1.peek();
int second = s2.peek();
if (first == second) --> returns true

我检查了其他值(例如 10)。在这种情况下,直接查看比较效果很好。

我是否通过直接比较 View 做错了什么,或者这与以某种方式比较的值有关?

下面是最小的编码示例(我这样做只是为了实现最小堆栈问题的练习):

public class MinStack {

public static void main(String[] args) {
MinStack minStack = new MinStack();
minStack.push(512);
minStack.push(-1024);
minStack.push(-1024);
minStack.push(512);
minStack.pop();
System.out.print(minStack.getMin());
minStack.pop();
System.out.print(minStack.getMin());
minStack.pop();
System.out.print(minStack.getMin());
}

Stack<Integer> originalStack;
Stack<Integer> minStack;

/** initialize your data structure here. */
public MinStack() {
originalStack = new Stack<>();
minStack = new Stack<>();
}

public void push(int x) {
originalStack.push(x);
if(minStack.isEmpty() || minStack.peek() >= x)
minStack.push(x);
}

public void pop() {
if(originalStack.peek() == minStack.peek())
minStack.pop();
originalStack.pop();
}

public int top() {
return originalStack.peek();
}

public int getMin() {
return minStack.peek();
}

}

最佳答案

发生这种情况是因为 Integer实习。 java.lang.Integer代表小值的对象,例如 10 ,是预先制造的,因此当您推送自动装箱 10 时在两个单独的堆栈上,同一个对象被推送。

一旦到达代码中 peek() 的位置,为 10 返回相同的对象,但 -1024 返回两个不同的对象。这就是为什么==对于 10 返回 true ,但不适用于-1024 .

当您添加int时变量接收peek() -ed 值,自动拆箱负责收获 intInteger 具有相同值的 s ,所以代码为 -1024再次工作。

您可以通过替换 == 来解决此问题与 equals在你的条件中:

if (s1.peek().equals(s2.peek())) --> returns true

关于java - Stack.peek() 比较返回错误结果 -1024,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com