JAVA面向对象与类

某停车场只有一个入口和出口,需要用JAVA面向对象与类来完成:

1.停车场车位总数由程序输入

2.如果车位已满,则等待空车位

备注:上面两条是基本要求,希望大佬能展示运行结果,就跟小区停车场那样有车辆信息,停车时间,以及出车库收费情况

马上要交课设了还不会,各位路过的大佬救救我😭,谢谢。

这个用queue队列就能实现。

package T3;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Car extends JFrame implements ActionListener{

	JPanel southPanel;
	JButton btnIn,btnOut;
	CQueue queue;
	ImagePanel imagePanel;
	int index=-1;
	boolean flag=false;
	public Car() {
		super("家家乐停车场...");
		queue = new CQueue();
		java.awt.Container c = getContentPane();
		southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		imagePanel = new ImagePanel();
		btnIn = new JButton("入库");
		btnOut = new JButton("出库");
		btnIn.addActionListener(this);
		btnOut.addActionListener(this);
		southPanel.add(btnIn);
		southPanel.add(btnOut);
		c.add(imagePanel);
		c.add(southPanel,BorderLayout.SOUTH);
		setSize(1250, 250);
		setVisible(true);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==btnIn){
			flag=true;
			index = queue.inQueue("1");
			imagePanel.repaint();
		}else if(e.getSource()==btnOut){
			flag=false;
			index=queue.outQueue();
			imagePanel.repaint();
		}
	}
	//内部类
	class ImagePanel extends JPanel{
		ImageIcon[] images ={
				new ImageIcon("qq.jpg"),
				new ImageIcon("clear.jpg")
		};
		int width=126; //图片宽
		int height=131;//图片的高
		@Override
		public void paint(Graphics g) {
			if(index>=0){
				if(flag){
					g.drawImage(images[0].getImage(), index*width, 0,width,height,Color.BLUE, this);
				}else{
					g.drawImage(images[1].getImage(), index*width, 0,width,height,Color.BLUE, this);
				}
			}
		}
	}
	public static void main(String[] args) {
		new Car();
	}
}


package T3;

import java.util.Queue;

public class CQueue {

	Object [] data;
	int size;
	int front;
	int rear;
	public CQueue() {
		this.size = 11;
		front = 0;
		rear = 0;
		data = new Object[this.size];
	}
	public CQueue(int size) {
		this.size = size+1;
		front = 0;
		rear = 0;
		data = new Object[this.size];
	}
	//队列是否已满:队尾指针+1=对首指针
	public boolean isFull(){
		if((rear+1) % this.size == front){
			return true;
		}else{
			return false;
		}
	}
	//队列为空:front==rear;
	public boolean isEmpty(){
		if(front==rear){
			return true;
		}else{
			return false;
		}
	}
	
	//入队
	public int inQueue(Object dat){
		if(isFull()){
			System.out.println("队列已满");
			return -1;
		}else{
			rear++;
			rear = rear % this.size;
			data[rear]=dat;
			System.out.println("入队:"+dat);
			return rear;
		}
	}
	//出队
	public int outQueue(){
		if(isEmpty()){
			System.out.println("队列为空");
			return -1;
		}else{
			front++;
			front = front % this.size;
			System.out.println("出队:"+data[front]);
			return front;
		}
	}
	//遍历
	public void display(){
		int f = (front+1) % this.size;//1
		int r = (rear+1) % this.size; 
		System.out.println("f="+f+";r="+r);
		while(f!=r){
			System.out.println("遍历:"+data[f]);
			f++;
			f=f % this.size;
		}
	}
	public static void main(String[] args) {
		CQueue queue = new CQueue();
		queue.inQueue("1");
		queue.inQueue("2");
		queue.inQueue("3");
		queue.inQueue("4");
		queue.inQueue("5");
		queue.inQueue("6");
		queue.inQueue("7");
		queue.inQueue("8");
		queue.inQueue("9");
		queue.inQueue("10");
		queue.inQueue("11");

		queue.display();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.outQueue();
		queue.inQueue("11");
		queue.inQueue("12");
		queue.inQueue("13");
		queue.inQueue("14");
		queue.display();
	}
}

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

 点赞