有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类java队列方法需要帮助

我正在用Java做一个项目,我需要创建一个队列方法

每次将某人添加到房间时,都需要将其添加到队列中

我需要在您的程序中创建我自己的队列对象,并在该对象中编写方法以添加到队列和从队列中获取

每次将客户添加到房间时,都应使用 队列对象方法,将客户的名称添加到队列中

当用户选择显示最后3位客户的姓名时,代码应将其从队列中逐个删除(先进先出),并在删除时显示

队列应该基于一个数组,包含7个项目

当队列项到达数组的末尾时,应将它们添加到起始或数组中

如果队列已满,则应显示错误消息,最早的队列项目应自动删除并显示

这是主体:

package hotelcoursework2;

import java.util.*;

public class HotelCourseWork2 {

    public static void main(String[] args) {

        Room[] myHotel = new Room[10];
        Queue mq = new Queue();

        int guests = 0;    
        String roomName = null;
        int roomNum = 0;
        String letter = "";

        for (int i = 0; i < myHotel.length; i++) {
            myHotel[i] = new Room();

        }

        do {
            System.out.println("Press E to display empty rooms");
            System.out.println("Press A to add customers to room");
            System.out.println("Press V to view all rooms ");                  
            System.out.println("Press D to delete customers from rooms");
            System.out.println("Or enter 1 to add to queue, 2 to take from queue or 3 display queue");
            System.out.println("Press S to save");
            System.out.println("Press L to load");
            System.out.println("Press X to exit");
            System.out.println("Enter a Letter: ");
            Scanner scan = new Scanner(System.in);
            letter = scan.next();

            if (letter.equals("A")) {
                add(myHotel, roomNum, roomName, guests);

                mq.addqueue();
            }
            if (letter.equals("V")) {
                view(myHotel);
            }      
            if (letter.equals("E")){
                empty(myHotel);
            }

            if(letter.equals("D")){
                delete(myHotel, roomNum);
                mq.takequeue();
           }

            if (letter.equals("S")){

            }    

            if(letter.equals("3")){
                mq.displayqueue();
            }


        } while (letter.charAt(0) != 'X');
        System.out.println("Exit successfull");

    }


   private static void add(Room myHotel[], int roomNum, String roomName, int guests) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter room number (0-9) or 10 to stop:");
        roomNum = input.nextInt();
        if (roomNum == 10) {
            System.out.println("Exit successful");
            System.exit(0);
        }
        System.out.println("Enter name for room " + roomNum + " :");
        roomName = input.next();
        myHotel[roomNum].setName(roomName);
        System.out.println("Enter how many guests: ");
        guests = input.nextInt();
        myHotel[roomNum].setGuestsInRoom(guests);
        System.out.println("Add customers to queue: ");


        for (int i = 0; i < 10; i++) {
            System.out.println("Customer " + myHotel[i].getName() + " has been allocated to room " + i
             + " with " + myHotel[i].getGuestsInRoom() + " guests. ");

        }
    }

   private static void view(Room myHotel[]) {

        for (int i = 0; i < 10; i++) {
            System.out.println("room " + i + " occupied by " + myHotel[i].getName() );
        }
    }

   private static void empty(Room myHotel[]) {
        for (int i = 0; i < 10; i++) {
            if (myHotel[i].getName().equals("no-one")) {
                System.out.println("room " + i + " is empty");
            }
        }
    }

   private static void delete(Room myHotel[], int roomNum){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter room number you want to delete a customer from: ");
        roomNum = input.nextInt();
        myHotel[roomNum].setName("no-one");

   }



}

这是我为队列创建的类,但现在我被卡住了。队列应该是先进先出的

package hotelcoursework2;
import java.util.Scanner;

public class Queue {

    // be careful - this queue can go over the end of the array
    //the array should be used in a circular way
    private static String qitems[] = new String[7];
    private static int front = 0, end = 0;

    static void addqueue() {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter someone to the queue :");
        qitems[end] = input.next();
        end++;

    }

    static void takequeue() {
        if (end > front) {
            System.out.println("Person remove :" + qitems[front]);
            front++;
        } else {
            System.out.println("Empty queue");
        }
    }

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

}


共 (1) 个答案

  1. # 1 楼答案

    因此,基本上您想知道如何实现一个简单的队列

    除非必须这样做,否则使用数组更为复杂,因为必须调整数组的大小并移动其内容

    最简单的队列结构是链表,如下所示:

    public class Queue<T>
    {
      private Node head;
      private Node tail;
    
      public void add(T value)
      {
        if (head == null)
        {
          head = new Node(null, value);
          tail = head;  
        }
        else
        {
          tail = new Node(tail, value);
        }
      }
    
      public T peek()
      {
        return head == null ? null : head.value;
      }
    
      public T take()
      {
        if (head == null)
        {
          return null;
        }
        else
        {
          T value = head.value;
          head = head.next;
          return value;
        }
      }
    
      @Override
      public String toString()
      {
        StringBuilder stringBuilder = new StringBuilder();
    
        stringBuilder.append("[");
    
        Node current = head;
        while (current != null)
        {
          stringBuilder.append(current.value).append(",");
          current = current.next;
        }
    
        return stringBuilder.replace(stringBuilder.length() - 1, stringBuilder.length(), "]").toString();
      }
    
      private class Node
      {
        private Node next;
        private T value;
    
        public Node(Node previous, T value)
        {
          this.value = value;
    
          if (previous != null)
          {
            previous.next = this;
          }
        }
      }
    }
    

    此类在添加新值时保持对headtail{}链中调整引用的引用,并在获取值时修改head引用