如何让我的 for 循环正确打印我的 LinkedList 队列

How do I make my for loop print my LinkedList Queue properly

我正在编写此程序以使用重复序列对消息进行编码。我相信我正确地得到了编码过程。在打印 for 循环之前使用 toString 语句给我正确的值,但是当我尝试 运行 末尾的 for 循环时,它不会打印列表中的每个元素。例如,当我输入 "Hello" 时,我返回 "Igo" 而不是预期的 "Igopt"。我唯一能想到的是,当我 运行 我的 for 循环时,我的编码列表不知何故缩小了,但是我创建了一个新的 LinkedList 打印,这样我就不会影响编码列表,所以我不确定为什么打印不正确。

import java.util.*;

public class Encode {

    public static void main(String[] args) {
        Encode enc = new Encode();
        System.out.println("Please Enter String to Decode");
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        System.out.println("Encoded: " + enc.Encode(str));

    }

    public String Encode(String toEncode) {
        Queue key = new LinkedList(); // creates a key and adds the key values
        Queue clone = new LinkedList();
        key.add(1);
        key.add(2);
        key.add(3);
        key.add(4);
        key.add(5);
        LinkedList encoded = new LinkedList(); // creates a list for the encoded
        LinkedList print = new LinkedList();
        print = encoded; // values
        int ascii; // ascii value of the character
        int keyValue; // int value of the key to add to the ascii and encode the
        // characters
        char result; // sum of int values of the character and the key
        String s = ""; // initializes the String used for return value
        for (int i = 0; i < toEncode.length(); i++) {

            clone = key;
            char myChar = toEncode.charAt(i); // gets character at i
            ascii = (int) myChar; // converts character at i to an int value
            if (ascii == 32) { // ignores spaces
                continue;
            }

            else { // if character is not a space
                keyValue = (int) clone.remove();
                result = (char) (ascii + keyValue);
                encoded.add(result);
                clone.add(keyValue);

            }

        }
        System.out.println(encoded.toString()); // testing to see if encoded
                                                // properly *remove after
        // prints the elements of the encoded List
        for (int j = 0; j < encoded.size(); j++) {

            s = s + print.remove(); // gets the first value and concatenates
                                    // it to the string
        }

        return s;
    }

}

The only thing I can think of is that somehow my encoded List somehow shrinking as I run my for loop, however I created a new LinkedList print so that I would not affect the encoded List, so I'm not sure exactly why it isn't printing correctly.

这正是正在发生的事情。

你的 LinkedList print 根本没有保护任何东西,因为它只是对同一个列表的另一个引用,你对它所做的删除会影响原始列表。

要使其成为具有相同元素的不同列表,您可以使用

创建它
    LinkedList print = new LinkedList(encoded);

将最后一个 for-loop 更改为 while-loop 一切正常

while(!print.isEmpty()){
            s=s+print.remove();
        }

我正在调查为什么 for-loop 不起作用

您 运行 遇到的问题称为 aliasing,主要是通过设置 print = encoded 您正在将两个列表指针设置为彼此相等。在 java 中,这意味着当您更改一个列表时,另一个列表也会更改。