如何使我的for循环正确打印LinkedList Queue

时间:2015-07-13 21:56:45

标签: java for-loop linked-list queue

我正在编写此程序以使用重复序列对消息进行编码。我相信我正确地得到了编码过程。在print for循环之前使用toString语句给出了正确的值,但是当我尝试在最后运行for循环时,它不会打印列表中的每个元素。例如,当我输入“你好”时,我会回到“Igo”而不是预期的“Igopt”。我能想到的唯一一件事是,当我运行for循环时,我的编码List以某种方式缩小了,但是我创建了一个新的LinkedList打印,这样我就不会影响编码的List,所以我不确定为什么它不是'正确打印。

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;
    }

}

3 个答案:

答案 0 :(得分:2)

  

我唯一能想到的是,当我运行for循环时,我的编码List会以某种方式缩小,但是我创建了一个新的LinkedList打印,这样我就不会影响编码列表了,所以我不确定确切地说,为什么它没有正确打印。

这正是发生的事情。

您的LinkedList print根本不保护任何内容,因为它只是对同一列表的另一个引用,而您执行的删除会影响原始列表。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

for-loop的所有内容更改为while-loop

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

我正在调查为什么for-loop没有工作