Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反转链表队列时遇到问题_Java_Linked List - Fatal编程技术网

Java 反转链表队列时遇到问题

Java 反转链表队列时遇到问题,java,linked-list,Java,Linked List,这是家庭作业的一部分,我对Java一点也不精通,因为我还是一名学生,每天都在抽出时间学习,非常感谢所有反馈 我正在研究反转一个通过链表初始化的队列,我想不出一个更简单的方法,所以我将每个值保存到一个数组中,然后反向打印数组 这就是我想出的方法: @Override public void reverseDisplay() { System.out.println("The values of this linked list in reverse are: "); T[] hol

这是家庭作业的一部分,我对Java一点也不精通,因为我还是一名学生,每天都在抽出时间学习,非常感谢所有反馈

我正在研究反转一个通过链表初始化的队列,我想不出一个更简单的方法,所以我将每个值保存到一个数组中,然后反向打印数组

这就是我想出的方法:

@Override
public void reverseDisplay() {
    System.out.println("The values of this linked list in reverse are: ");
    T[] hold;
    hold = (T[]) new Object[numElements];
    int count = 0;
    do {
        rear = front;
        hold[count] = front.getInfo();
        count++;
        front = front.getLink();
    } while (rear.getLink() != null);
    for (int i = hold.length - 1; i > 0; i--) {
        System.out.print((i+1) + ": ");
        System.out.println(hold[i]);
    }
}
这是我的主要课程:

public static void main(String[] args) {
    Scanner A1 = new Scanner(System.in);
    String input = "";
    LinkedUnbndQueue Q = new LinkedUnbndQueue();
    while (!"-1".equals(input)) {
            System.out.println("Enter the next value of your queue");
            input = A1.nextLine();
            Q.enqueue(input);
        }
    //Q.display();
    //Q.retElements();
    Q.reverseDisplay();
}
在运行时,一切工作都很完美,但当我输入-1时,抛出了一个“ArrayIndex越界异常”,它将我带到这行:

            hold[count] = front.getInfo();
你知道我可能做错了什么吗?如果需要任何额外的信息,请告诉我

这是我正在编辑的原始类:

@luk2302提供的答案解决了我遇到的问题! 但是现在,我需要弄清楚如何在运行显示方法之后,在反转列表之前重置链接列表

这是我的显示方法:

@Override
public void display() {
    System.out.println("The values of this linked list are: ");
    int counter = 1;
    do {
        rear = front;
        System.out.print((counter) + ": ");
        counter++;
        System.out.println(front.getInfo());
        front = front.getLink();
    } while (rear.getLink() != null);
}

尝试将
A1.nextLine()
放在while循环之前,如下所示:

   System.out.println("Enter the next value of your queue");
    String input = A1.nextLine();
   while (!"-1".equals(input)) {
        Q.enqueue(input);
    }
  while (!"-1".equals(input) && condition) {
        count++;
        Q.enqueue(input);
    }
或添加新条件或计数器,如下所示:

   System.out.println("Enter the next value of your queue");
    String input = A1.nextLine();
   while (!"-1".equals(input)) {
        Q.enqueue(input);
    }
  while (!"-1".equals(input) && condition) {
        count++;
        Q.enqueue(input);
    }
柜台:

 int count = 0 ;
 while (!"-1".equals(input) && count < 5) {
        count++;
        Q.enqueue(input);
    }
int count=0;
而(!“-1”。等于(输入)和计数<5){
计数++;
排队(输入);
}

尝试将
A1.nextLine()
放在while循环之前,如下所示:

   System.out.println("Enter the next value of your queue");
    String input = A1.nextLine();
   while (!"-1".equals(input)) {
        Q.enqueue(input);
    }
  while (!"-1".equals(input) && condition) {
        count++;
        Q.enqueue(input);
    }
或添加新条件或计数器,如下所示:

   System.out.println("Enter the next value of your queue");
    String input = A1.nextLine();
   while (!"-1".equals(input)) {
        Q.enqueue(input);
    }
  while (!"-1".equals(input) && condition) {
        count++;
        Q.enqueue(input);
    }
柜台:

 int count = 0 ;
 while (!"-1".equals(input) && count < 5) {
        count++;
        Q.enqueue(input);
    }
int count=0;
而(!“-1”。等于(输入)和计数<5){
计数++;
排队(输入);
}

首先,您应该实际忽略
-1
值。您当前的代码将-1附加到列表中,然后打印列表。我猜实际上不应该附加-1:

while (true) {
    System.out.println("Enter the next value of your queue");
    input = A1.nextLine();
    if ("-1".equals(input)) {
        break;
    }
    Q.enqueue(input);
}
然后让我们转到实际反转:

我不知道您当前从何处获得
numElements
,因此我的函数将从以下内容开始:

void reverseDisplay() {        
    System.out.println("The values of this linked list in reverse are: ");

    if (isEmpty())
        return;

    int numElements = 1;
    LLNode elem = front;
    while ((elem = elem.getLink()) != null) {
        numElements++;
    }
    // ...
}
现在我们知道了实际列表的长度。保留剩余代码将打印出来

输入队列的下一个值
0
输入队列的下一个值
10
输入队列的下一个值
30
输入队列的下一个值
50
输入队列的下一个值
-1
此链表的反向值为:
4:50
3:30
2:10
1:0


请注意,写入<代码>前部<代码>和/或<代码>后部<代码>会破坏列表的剩余逻辑,您不能更改它们的值,只能从中读取。

首先,您应该实际忽略
-1
值。您当前的代码将-1附加到列表中,然后打印列表。我猜实际上不应该附加-1:

while (true) {
    System.out.println("Enter the next value of your queue");
    input = A1.nextLine();
    if ("-1".equals(input)) {
        break;
    }
    Q.enqueue(input);
}
然后让我们转到实际反转:

我不知道您当前从何处获得
numElements
,因此我的函数将从以下内容开始:

void reverseDisplay() {        
    System.out.println("The values of this linked list in reverse are: ");

    if (isEmpty())
        return;

    int numElements = 1;
    LLNode elem = front;
    while ((elem = elem.getLink()) != null) {
        numElements++;
    }
    // ...
}
现在我们知道了实际列表的长度。保留剩余代码将打印出来

输入队列的下一个值
0
输入队列的下一个值
10
输入队列的下一个值
30
输入队列的下一个值
50
输入队列的下一个值
-1
此链表的反向值为:
4:50
3:30
2:10
1:0



请注意,写入
前面的
和/或
后面的
会破坏列表的剩余逻辑,您不能更改它们的值,只能从中读取。

您可能希望链接您所依赖的资源,这是一个好主意!实际上,我不知道在哪里可以找到这些资源,我们的教授只是将书中的所有文件归档并发送给我们。你可能想链接你所依赖的资源,就像一个好主意!实际上我不知道在哪里可以找到这些资源,我们的教授只是将书中的所有文件归档并发送给我们。这不是给了我一个无限循环吗?@K.Saudi但你可以做如上所述的事情我知道你要做什么,但我想链表队列的目的是让它不绑定(即,与用户正在使用的量同时获取无限量的值)因此,添加一个计数器将无法达到目的。不过,我很感谢您的输入!这不是给了我一个无限循环吗?@K.Saudi,但您可以这样做吗?我知道您要做什么,但我认为链表队列的目的是将其解除绑定(即,与用户正在使用的量同时获取无限量的值)因此,添加一个计数器将无法达到目的。不过,我很感谢您的输入!我现在正在阅读您的评论,我已经在主类中初始化了numElements,并让它在每次调用enqueue方法时增加1,在每次调用dequeue方法时减少1。我将很快发回结果!@K.Saudi这可能不是问题所在正确的方法是,你不想在一些不相关的变量中有全局状态,我的方法在这方面更好。好的,我已经测试过了,出于某种原因,当你在开始添加isEmpty时,它返回真值,即使链表中有元素,也无法理解为什么。我现在正在看一看,这解释了为什么如果我删除了ifEmpty,我会得到一个NullPointerException,你知道为什么程序会认为Front=Null吗?@K.Saudi No。试着一步一步地调试它,看看Front是否会变为非Null,在什么时候会变回!?我现在正在阅读你的评论,我已经初始化了main类中的numElements,并让它增加1%rytime调用enqueue方法并在每次调用dequeue方法时下降1。我将很快发回结果!@K.Saudi这可能不是正确的方法,您不希望在一些不相关的变量中有全局状态,我的方法在这方面更好。好的,我已经测试过了,出于某种原因,当您添加t时他是伊瑟