Java 我的代码没有打印队列的所有元素。错误是什么?
这是我的排队课。我已经用数组实现了它Java 我的代码没有打印队列的所有元素。错误是什么?,java,Java,这是我的排队课。我已经用数组实现了它 public class QueueUsingArray { private int data[]; private int firstElementIndex; private int nextElementIndex; private int size; public QueueUsingArray() { data = new int[10]; firstElementIndex = -1; nextElementIndex
public class QueueUsingArray {
private int data[];
private int firstElementIndex;
private int nextElementIndex;
private int size;
public QueueUsingArray() {
data = new int[10];
firstElementIndex = -1;
nextElementIndex = 0;
size = 0;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size() == 0;
}
private void checkEmpty() throws QueueEmptyException {
if (size == 0) {
QueueEmptyException e = new QueueEmptyException();
throw e;
}
}
public int front() throws QueueEmptyException {
checkEmpty();
return data[firstElementIndex];
}
public int dequeue() throws QueueEmptyException {
checkEmpty();
int output = data[firstElementIndex];
size--;
data[firstElementIndex] = 0;
firstElementIndex = (firstElementIndex + 1) % data.length;
if (size == 0) {
firstElementIndex = -1;
nextElementIndex = 0;
size = 0;
}
return output;
}
public void enqueue(int element) {
if (size == data.length) {
int[] temp = data;
data = new int[data.length * 2];
int k = 0;
for (int i = firstElementIndex; i < temp.length; i++) {
data[k] = temp[i];
k++;
}
for (int i = 0; i < firstElementIndex; i++) {
data[k] = temp[i];
k++;
}
firstElementIndex = 0;
nextElementIndex = temp.length;
}
if (size == 0) {
firstElementIndex = 0;
}
data[nextElementIndex] = element;
size++;
nextElementIndex = (nextElementIndex + 1) % data.length;
}
}
公共类队列使用阵列{
私有整数数据[];
私有int firstElementIndex;
私有int-nextElementIndex;
私有整数大小;
公共队列使用阵列(){
数据=新整数[10];
firstElementIndex=-1;
nextElementIndex=0;
尺寸=0;
}
公共整数大小(){
返回大小;
}
公共布尔值为空(){
返回大小()==0;
}
private void checkEmpty()引发QueueEmptyException{
如果(大小==0){
QueueEmptyException e=新的QueueEmptyException();
投掷e;
}
}
public int front()引发QueueEmptyException{
checkEmpty();
返回数据[firstElementIndex];
}
public int dequeue()抛出QueueEmptyException{
checkEmpty();
int输出=数据[firstElementIndex];
大小--;
数据[firstElementIndex]=0;
firstElementIndex=(firstElementIndex+1)%data.length;
如果(大小==0){
firstElementIndex=-1;
nextElementIndex=0;
尺寸=0;
}
返回输出;
}
公共void排队(int元素){
if(size==data.length){
int[]温度=数据;
data=newint[data.length*2];
int k=0;
对于(int i=firstElementIndex;i
这是我的QueueUse类
public class QueueUse {
public static void main(String[] args) throws QueueEmptyException {
QueueUsingArray q=new QueueUsingArray();
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.enqueue(40);
q.enqueue(50);
q.enqueue(60);
q.enqueue(70);
q.enqueue(80);
q.enqueue(90);
q.enqueue(100);
q.enqueue(110);
q.enqueue(120);
q.enqueue(130);
q.enqueue(140);
q.enqueue(150);
q.enqueue(160);
q.enqueue(170);
q.enqueue(180);
q.enqueue(190);
q.enqueue(200);
q.enqueue(210);
q.enqueue(220);
q.enqueue(230);
q.enqueue(240);
q.enqueue(250);
q.enqueue(260);
q.enqueue(270);
q.enqueue(280);
q.enqueue(290);
q.enqueue(300);
System.out.println("All elements");
for(int i=0;i<q.size();i++){
try {
System.out.println(q.dequeue());
} catch (QueueEmptyException e) {
System.out.println("Sorry");
}
}
}
}
公共类队列使用{
公共静态void main(字符串[]args)引发QueueEmptyException{
QueueUsingArray q=新的QueueUsingArray();
q、 排队(10);
q、 排队(20);
q、 排队(30);
q、 排队(40);
q、 排队(50);
q、 排队(60);
q、 排队(70);
q、 排队(80);
q、 排队(90人);
q、 排队(100);
q、 排队(110);
q、 排队(120);
q、 排队(130);
q、 排队(140);
q、 排队(150);
q、 排队(160);
q、 排队(170);
q、 排队(180);
q、 排队(190);
q、 排队(200);
q、 排队(210);
q、 排队(220);
q、 排队(230);
q、 排队(240);
q、 排队(250);
q、 排队(260);
q、 排队(270);
q、 排队(280);
q、 排队(290);
q、 排队(300);
系统输出打印项次(“所有元素”);
for(int i=0;i您的print方法不起作用,因为每次在for循环中调用dequeue()
方法时,您都会减小大小。如果要使用for循环,您应该使用固定大小。基本上在这条语句中(i
随着i
的增长size
的减少。如果i=0
和size=4
第一个循环i
将是1,size
将是3。你永远不会到达队列中的第0个或第一个元素,因为到下一个循环时,你已经在i=2
和size=3
首先,应该为队列项添加一个getter
public int getElementAt(int index){
return data[index];
}
然后可以在for循环中为数据中的每个索引调用该方法
int length = q.size();
for(int i = 0; i < length; i++){
System.out.println(q.getElementAt(i));
}
调试时您看到了什么?更多:调试是第一步。为什么要调用q.enqueue()
30次?建议:使用for loopfor(国际卢旺达问题国际法庭=10;ictr@T.J.Crowder我已经试过调试。它只是在打印140后从循环中出来。@Nimesh我会这样做,但请先告诉我问题的解决方案。谢谢。@iVvaibhav:那不是调试。请阅读链接。调试是在调试程序中运行代码,逐语句逐条执行,检查变量,等等。如果你这样做,你会发现逻辑中的错误。学习有效地调试是学习编程的一个组成部分,我们都必须学习它,而且我们每天都必须学习。谢谢它奏效了……)我只有一个问题。每当我想要打印队列元素时,我都必须初始化一个变量作为队列的大小?请弄清楚。这取决于您的实现。对循环使用动态大小不是好的做法
public class Queue {
private Vector<String> data ;
Queue(){
data = new Vector();
}
public void enqueue(String item){
data.add(item);
}
public void dequeue(){
data.remove(0);
}
public void printQueueItems(){
int length = data.size();
for(int i = 0; i < length; i++){
System.out.println(data.get(i));
}
}
public static void main(String[] args) {
Queue myQ = new Queue();
myQ.enqueue("hello");
myQ.enqueue("world");
myQ.enqueue("!");
myQ.printQueueItems();
}
}