【发布时间】: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