【问题标题】:Java: Having trouble finding the minimum value of a Queue?Java:难以找到队列的最小值?
【发布时间】:2017-09-22 00:46:31
【问题描述】:

我正在使用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;
}
}

即使我将 while 循环更改为 for 循环,peek 函数也会一遍又一遍地返回 2。出于某种原因,每当我将其出队时,它都不会更新其值?但是逐行浏览我无法理解问题所在。

【问题讨论】:

    标签: java arraylist queue


    【解决方案1】:

    一个更简单的方法是

        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 循环都可以工作

    【讨论】:

    • 啊,我现在明白了。 min > peek 语句导致它转圈。
    • 还是半圆
    【解决方案2】:

    您的意思是您的代码一直在打印 2 吗?那是因为你的 min() 方法总是在 2 结束

    第一次迭代你的 int 最小值将是 5

    第二次迭代你的 int 最小值将是 2

    第三次迭代你的循环将退出,因为 2 不大于 6

    那么你的方法会返回 2

    希望对你有帮助

    【讨论】:

    • 我看到了逻辑,但我不明白为什么当我失去一个 while 循环而不是一个 for 循环时它会终止?这里应该没有任何限制吧?出队不应该影响任何事情,因为它只是使用自己的函数正确删除索引的数组列表。所以问题出在 peek() 函数上?但这是在做类似的事情,只是返回 0 的索引值。
    • 你需要循环遍历所有元素,但你的循环只是在循环min &gt; peek()
    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多