我正在使用arraylist来实现队列。一切都很顺利,除非当我试图找到队列的最小值时它不能正常工作,并且出于某种原因出队和偷看功能不能按预期工作。我尝试逐行,但我不明白min()函数出了什么问题:
public class queuePractice {
static ArrayList<Integer>nums = new ArrayList<Integer>();
static int top = -1;
public static void main(String[] args) {
enqueue(5);
enqueue(2);
enqueue(6);
enqueue(3);
enqueue(12);
enqueue(1);
enqueue(20);
System.out.println("The min is: " + min());
}
public static int peek() {
return nums.get(0);
}
public static void enqueue(int x) {
nums.add(++top, x);
}
public static int dequeue() {
top--;
return nums.remove(0);
}
public static void display() {
for(int x = 0; x <=top; x++) {
System.out.print(nums.get(x) + " ");
}
System.out.println();
}
public static boolean isEmpty() {
return top==-1;
}
public static int min() {
int min = Integer.MAX_VALUE;
while(min > peek()) {
min = peek();
dequeue();
}
return min;
}
}
peek函数一直反复返回2,即使我将while循环更改为for循环也是如此。出于某种原因,每当我出列时它都没有更新它的价值?但是逐行检查我无法理解什么是错的。
答案 0 :(得分:0)
您的意思是您的代码一直在打印2吗?这是因为你的min()方法总是在2
上终止首次迭代你的int min值为5
第二次迭代你的int min值为2
第三次迭代你的循环将退出,因为2不大于6
然后你的方法将返回2
希望有所帮助
答案 1 :(得分:0)
更简单的方法是
List<Integer>nums = Arrays.asList(5,2,35,6); // or use your enqueue
Iterator<Integer> it = nums.iterator();
int min = Integer.MAX_VALUE;
while (it.hasNext()) {
Integer i = it.next();
min = Math.min(i, min);
}
System.out.println(min);
当然,List周围的任何类型的循环都可以正常工作