Java:无法找到队列的最小值?

时间:2017-09-22 00:46:31

标签: java arraylist queue

我正在使用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循环也是如此。出于某种原因,每当我出列时它都没有更新它的价值?但是逐行检查我无法理解什么是错的。

2 个答案:

答案 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周围的任何类型的循环都可以正常工作