如何在链表中重复存储数据?

时间:2016-10-25 17:18:15

标签: java linked-list

我有一个程序,我想在链表中继续添加整数和字符串。但是,当我打印出链表时,它只打印出最后输入的值而不是之前输入的值。因此,如果我输入3 Sally然后输入6 Bob,则链表仅打印出6个bob。我希望能够打印出链接列表中的所有内容,而不仅仅是最后输入的内容。

public class Texteditor  {

/**
 * @param args the command line arguments
 */
static int myInt;
static String myString;

public Texteditor(int a, String s){
    myInt = a;
    myString = s;
}
public String toString(){
    return myInt + " " + myString;
}
public static void main(String[] args) {
     LinkedList<Texteditor> myLL = new LinkedList<Texteditor>();

    int isExit = 0;
    System.out.println("Hello Welcome to Your Personal Texteditor! ");
    System.out.println("There are many options you can do with this text editor");
    System.out.println("1. If you enter a line number with no text, the line number will be deleted.");
    System.out.println("2. If you enter LIST alone the editor will print everything in the list with line number.");
    System.out.println("3. If you enter RESEQUENCE the line numbers will be resequenced to start at 10.");
    while(isExit ==0) {
 //   myLL = new LinkedList<Texteditor>();
    System.out.println("");
    System.out.println("Please enter the line number: ");
    Scanner kb = new Scanner(System.in);
    myInt = kb.nextInt();
    System.out.println("Plese enter text as a string: ");
    Scanner kb1 = new Scanner(System.in);
    myString = kb1.nextLine();
    Texteditor a1 = new Texteditor(myInt, myString); 
    myLL.add(a1); 
    System.out.println("Would you like to keep going? Enter yes or no: " );
    Scanner kb2 = new Scanner(System.in);
    if (kb2.next().equals("no")){
        isExit = 1;
    }
    } 

    for (Texteditor element : myLL){
        System.out.println(element + "\n");
    }        
}    
}

3 个答案:

答案 0 :(得分:1)

您的myIntmyString是静态的,这意味着它们由实例共享。使它们非静态,代码应该正常工作。

此外,每次循环时都不要重新创建Scanner。一次就够了。

答案 1 :(得分:0)

问题是你将myInt和myString变量设为静态。删除静态修饰符,然后在while循环中,而不是引用类的myInt和myString变量,而是创建局部int和String变量。

public class Texteditor  {

/**
 * @param args the command line arguments
 */
 int myInt;
 String myString;

    public Texteditor(int a, String s){
        myInt = a;
        myString = s;
    }
    public String toString(){
        return myInt + " " + myString;
    }

    public static void main(String[] args) {
        LinkedList<Texteditor> myLL = new LinkedList<Texteditor>();

        int isExit = 0;
        System.out.println("Hello Welcome to Your Personal Texteditor! ");
        System.out.println("There are many options you can do with this text editor");
        System.out.println("1. If you enter a line number with no text, the line number will be deleted.");
        System.out.println("2. If you enter LIST alone the editor will print everything in the list with line number.");
        System.out.println("3. If you enter RESEQUENCE the line numbers will be resequenced to start at 10.");
        while(isExit ==0) {
     //   myLL = new LinkedList<Texteditor>();
            System.out.println("");
            System.out.println("Please enter the line number: ");
            Scanner kb = new Scanner(System.in);
            int myInt = kb.nextInt();
            System.out.println("Plese enter text as a string: ");
            Scanner kb1 = new Scanner(System.in);
            String myString = kb1.nextLine();
            Texteditor a1 = new Texteditor(myInt, myString); 
            myLL.add(a1); 
            System.out.println("Would you like to keep going? Enter yes or no: " );
            Scanner kb2 = new Scanner(System.in);
            if (kb2.next().equals("no")){
                isExit = 1;
            }
        } 

        for (Texteditor element : myLL){
            System.out.println(element + "\n");
        }

    }
}

答案 2 :(得分:0)

您的代码的问题是变量myInt和myString是静态的,因此它们不属于每个单独的对象(它们属于该类)。因此,当你在这里引用它们时:

for (Texteditor2 element : myLL){
                System.out.println(element + "\n");
     }

您正在调用您最后设置的相同值。

这应解决问题:

创建一个新的TextEditorObject文件:

public class TextEditorObject {
     int myInt;
     String myString;

    public TextEditorObject(int a, String s){
        myInt = a;
        myString = s;
    }

    public String toString() {
        return myInt + " " + myString;
    }
}

像这样更改Texteditor:

public class Texteditor  {
public static void main(String[] args) {
    int myInt;
    String myString;

    LinkedList<TextEditorObject> myLL = new LinkedList<TextEditorObject>();

    int isExit = 0;
    System.out.println("Hello Welcome to Your Personal Texteditor! ");
    System.out.println("There are many options you can do with this text editor");
    System.out.println("1. If you enter a line number with no text, the line number will be deleted.");
    System.out.println("2. If you enter LIST alone the editor will print everything in the list with line number.");
    System.out.println("3. If you enter RESEQUENCE the line numbers will be resequenced to start at 10.");
    while(isExit ==0) {
 //   myLL = new LinkedList<Texteditor>();
    System.out.println("");
    System.out.println("Please enter the line number: ");
    Scanner kb = new Scanner(System.in);
    myInt = kb.nextInt();
    System.out.println("Plese enter text as a string: ");
    Scanner kb1 = new Scanner(System.in);
    myString = kb1.nextLine();
    TextEditorObject a1 = new TextEditorObject(myInt, myString); 
    myLL.add(a1); 
    System.out.println("Would you like to keep going? Enter yes or no: " );
    Scanner kb2 = new Scanner(System.in);
    if (kb2.next().equals("no")){
        isExit = 1;
    }
    } 

    for (TextEditorObject element : myLL){
        System.out.println(element + "\n");
    }

}
}