1、利用队列实现一个学生排队买票功能
1、定义一个学生类Student,包括学号No、姓名Name、性别Gender、年龄Age等信息
2、定义一个队列类Queue,用于将学生进行队列排序
3、可以从队列中删除学生
4、可以向队列中新增一名学生
5、注意:
(1)队列是一种数据结构,采取先进先出原则,先进入队列的数据先出队列
(2)可以定义一个对象数组,当数组元素未满,则新的同学可以进入;
(3)元素的删除只能从第一个元素删除(即队列头位置);元素的加入,只能从队尾加入
(4)要注意如果队列已满,则新的元素暂时不能加入;队列已空,则不能删除元素
我的代码:
package text14;
/1、利用队列实现一个学生排队买票功能
1、定义一个学生类Student,包括学号No、姓名Name、性别Gender、年龄Age等信息
2、定义一个队列类Queue,用于将学生进行队列排序
3、可以从队列中删除学生
4、可以向队列中新增一名学生
5、注意:
(1)队列是一种数据结构,采取先进先出原则,先进入队列的数据先出队列
(2)可以定义一个对象数组,当数组元素未满,则新的同学可以进入;
(3)元素的删除只能从第一个元素删除(即队列头位置);元素的加入,只能从队尾加入
(4)要注意如果队列已满,则新的元素暂时不能加入;队列已空,则不能删除元素/
package text14;
/*1、利用队列实现一个学生排队买票功能
1、定义一个学生类Student,包括学号No、姓名Name、性别Gender、年龄Age等信息
2、定义一个队列类Queue,用于将学生进行队列排序
3、可以从队列中删除学生
4、可以向队列中新增一名学生
5、注意:
(1)队列是一种数据结构,采取先进先出原则,先进入队列的数据先出队列
(2)可以定义一个对象数组,当数组元素未满,则新的同学可以进入;
(3)元素的删除只能从第一个元素删除(即队列头位置);元素的加入,只能从队尾加入
(4)要注意如果队列已满,则新的元素暂时不能加入;队列已空,则不能删除元素*/
public class test {
public static void main(String[] args) {
Queue queue = new Queue();
queue.Queue(6);
queue.addQueue("210", "T", "man", "13");
//queue.addQueue("220", "Q", "woman","13");
//queue.addQueue("230", "W", "man", "13");
//queue.addQueue("240", "E", "man", "13");
System.out.println(queue.deleteQueue());
}
}
class Student {
public String No;
public String Name;
public String Gender;
public String Age ;
public void Set(String No, String Name, String Gender, String Age ) {
this.No = No;
this.Name = Name;
this.Gender = Gender;
this.Age = Age;
}
}
class Queue extends Student{
private int maxSize;
private int front;
private int real;
Student[] student ;
public void Queue(int maxSize) {
this.maxSize = maxSize;
this.front = 0;
this.real = 0;
student = new Student[maxSize];
}
//判断队列是否满
public boolean isFull() {
return real == maxSize - 1;
}
//空
public boolean isEmpty() {
return real == front;
}
//添加元素
public void addQueue(String No, String Name, String Gender, String Age) {
if(isFull()) {
throw new RuntimeException("队列已满,禁止入队!");
}else {
student[real].Age = Age;
student[real].Gender=Gender;
student[real].Name=Name;
student[real].No=No;
real++;
}
}
public Student deleteQueue() {
if(isEmpty()) {
throw new RuntimeException("队列为空,禁止出队!");
}else {
return student[front++];
}
}
}
但是编译失败
Exception in thread "main" java.lang.NullPointerException: Cannot assign field "Age" because "this.student[this.real]" is null
at text14.Queue.addQueue(test.java:63)
at text14.test.main(test.java:17)
为什么,在线求解
你虽然初始化了student[] 这个数组,但是你没有往这个数组里放入student,所以这个时候数组的这个位置还是null,直接调用它的 age属性就报了空指针了。
你的addQueue可以改成直接添加Student对象的,或者还是这样添加,但是每次添加的时候new一个Student对象:例如这样
public void addQueue(String No, String Name, String Gender, String Age) {
if(isFull()) {
throw new RuntimeException("队列已满,禁止入队!");
}else {
Student newStu = new Student();
newStu.Age = Age;
newStu.Gender=Gender;
newStu.Name=Name;
newStu.No=No;
student[real] = newStu;
real++;
}
}