2015-03-31 2 views
1
public void pop() { 
    int a = stack.peek(); 
    int b = min.get(min.size()-1); 
    System.out.println("a:"+a+" "+"b:"+b); 
    if (a==b) { 
     System.out.println("111"); 
    } 
    if (stack.peek()==min.get(min.size()-1)) { 
     System.out.println("222"); 
    } 
    stack.pop(); 
} 

Я создал класс под названием MinStack, вот поп(), переменная стека является Stack (целое число), и мин является ArrayList (Integer), но второй, если stmt не всегда работает правильно.Java, два целых числа, они равны, но

я получил консоль, как это:

a:512 b:-1000 
a:-1000 b:-1000 
111 
a:-1000 b:-1000 
111 

Я думаю, что «111» и «222» всегда будет показывать вместе, но здесь нет. Если я изменю второй, если stmt как stack.peek()-min.get(min.size()-1)==0, то он работает правильно, почему это произошло?

Заранее благодарен. .

EDIT:

Я знаю, где это не так, я должен использовать stack.peek() intValue() == min.get (min.size() - 1) .intValue(), потому что они являются Integer.

+0

«Вы пытались отладить свой код? – Jens

+0

оба они Integer – Georgey

+0

вы можете добавить содержимое min и stack также – shikjohari

ответ

0

Это проблема сравнения Integer. stack.peek и min.get(min.size()-1) оба возвращаются Integer s. Несмотря на то, что они содержат одно и то же значение int, они не совпадают с экземпляром Integer, поэтому сравнение возвращает false.

Изменить код:

if (stack.peek().equals(min.get(min.size()-1))) { 
    System.out.println("222"); 
} 

Альтернативного сравнения stack.peek()-min.get(min.size()-1)==0 возвращает истинное, потому что здесь вы сравниваете два int примитивов.

+0

Спасибо всем тем же. – Georgey

Смежные вопросы