使用数组存储队列等元素

时间:2016-03-20 13:50:16

标签: java arrays

我正在研究酒店计划,我的Queue课程有问题。 我需要在程序中创建队列对象以添加到队列并从队列中获取。每次将名称添加到房间时,都应使用队列对象方法将客户的名称添加到队列中。当用户选择显示前3个客户的名称时,我的代码应该逐个从队列中删除它们(先进先出)并在删除它们时显示它们。

队列应基于数组。当队列项到达数组的末尾时,应将它们添加到开始或数组中。如果队列已满,则应自动删除并显示最旧的队列项。

此刻的问题是当结束达到5时它应该按下第一个输入并取最后一个输入并将其移动到数组的前面。另请注意,Queue必须基于字符串数组。请查看我到目前为止的代码,也许你们中的一些人可以提供帮助?

public class Queue {
static String qitems[] = new String[7];
static int front = 0, end = 0;

 void addqueue(String name) {

    System.out.println("Enter Queue Item :");
    qitems[end] = name;
    end++;
    if(end==5){
         takequeue(name);
    }
 }

 void takequeue(String name) {
     qitems[front]=name;
    if (end > front) {
        System.out.println("Item taken :" + qitems[front]);
        front++;
    } else {
        System.out.println("Empty queue");
    }
}

 void displayqueue() {
    System.out.println("Queue display: ");
    for (int look = front; look < end; look++) {
        System.out.println(" " + qitems[look]);





        System.out.println("end"+end);
    }
    System.out.println("");
}

1 个答案:

答案 0 :(得分:0)

addqueue()似乎有一个逻辑缺陷。在检查 if(end == 5)之前,结束的值会增加1。当end的值变为6时,忽略if语句,不会调用 takequeue()方法,您将面临问题。要解决此问题,请在结束++ 之前添加 if 语句

void addqueue(String name){ 
    System.out.println("Enter Queue Item :"); 
    qitems[end] = name; 
    if(end==5){ 
        takequeue(name); 
    } 
    end++;
}

或检查结束&gt; = 5 而不是结束== 5

void addqueue(String name){ 
    System.out.println("Enter Queue Item :"); 
    qitems[end] = name; 
    end++;
    if(end>=5){ 
        takequeue(name); 
    } 
}

P.S。在您的问题说明中使用正确的标点符号时,请在下次提问时更准确,更清晰。另请参阅常见问题解答中的如何提问部分。