【问题标题】:How to find evenly divisible numbers?如何找到可整除的数?
【发布时间】:2021-03-11 18:04:27
【问题描述】:

我在解决 Infytq 学习计划的一项小任务时遇到了这个障碍。我似乎无法弄清楚我遇到的问题。

给定一个队列。

我必须从给定队列中形成一个新的整数队列,其中队列中的数字是均匀的 能被 1 到 10 的所有数整除。

这是我到目前为止所做的。我目前的队列是空的。

class Queue {
      
    private int front;
    private int rear;
    private int maxSize;
    private int arr[];
      
    Queue(int maxSize) {
        this.front = 0;
        this.rear = -1;
        this.maxSize = maxSize;
        this.arr = new int[this.maxSize];
    }
      
    public boolean isFull() {
        if (rear == maxSize - 1) {
            return true;
        }
        return false;
    }
            
    public boolean enqueue(int data) {
        if (isFull()) {
            return false;
        } else {
            arr[++rear] = data;
            return true;
        }
    }

    public void display() {
        if(isEmpty())
            System.out.println("Queue is empty!");
        else {
            for (int index = front; index <= rear; index++) {
                System.out.println(arr[index]);
            }
        }
    }
            
    public boolean isEmpty() {
        if (front > rear)
            return true;
        return false;
    }
            
    public int dequeue() {
        if (isEmpty()) {
            return Integer.MIN_VALUE;
        } else {
            int data = arr[this.front];
            arr[front++] = Integer.MIN_VALUE;
            return data;
        }
    }

    public int getMaxSize() {
        return maxSize;
    }
}


class Tester {

    public static void main(String[] args) {
            
        Queue queue = new Queue(7);
        queue.enqueue(13983);
        queue.enqueue(10080);
        queue.enqueue(7113);
        queue.enqueue(2520);
        queue.enqueue(2500);

        Queue outputQueue = findEvenlyDivisibleNumbers(queue);
            
        System.out.println("Evenly divisible numbers");
        outputQueue.display();

    }
      
    public static Queue findEvenlyDivisibleNumbers(Queue queue) {
        //Implement your code here and change the return value accordingly
        Queue nqueue = new Queue(queue.getMaxSize());
        boolean flag = true;
        while(!(queue.isEmpty())){
            int val = queue.dequeue();
            for(int i=2;i<=10;i++){
                if(val%i!=0){
                    flag=false;
                    break;
                }
            }
            if(flag){
                nqueue.enqueue(val);
            }
        }
        return nqueue;
    }
}

【问题讨论】:

  • 我的第一个猜测是,一旦你在循环中设置了flag=false;,它就再也没有机会成为真的了。 (因此,如果您出列的第一个元素不能被 1-10 整除,则该标志将为 false 并在每次迭代中保持为 false,从而导致您的结果为空)您可能需要将 boolean flag = true; 移动到您的 while 循环中,以便对于每个你出队的元素初始值被重置为true。
  • 啊,是的,非常感谢,这是我的一个非常愚蠢的错误。

标签: java data-structures queue


【解决方案1】:

您应该在每次迭代 while 循环之前将您的 flag 重置为 true(正如您已经建议的那样)。


为了避免此类问题,请考虑将内部循环提取到单独的方法中。这将有助于避免嵌套循环破坏混乱:

public static boolean isDivisible(int value) {
    for (int i = 2; i < 10; i++) {
        if (value % i > 0) {
            return false;
        }
    }
    return true;
}

然后在遍历队列时简单地使用它:

public static Queue findEvenlyDivisibleNumbers(Queue queue) {
    Queue nqueue = new Queue(queue.getMaxSize());
    while (!(queue.isEmpty())) {
        int value = queue.dequeue();
        if (isDivisible(value)) {
            nqueue.enqueue(value);
        }
    }
    return nqueue;
}

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多