某停车场只有一个入口和出口,需要用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
点赞