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



我有一个程序,我想继续在链表中添加整数和字符串。然而,当我打印出链表时,它只打印出最后输入的值,而不是之前的值。所以如果我输入3 Sally然后输入6 Bob链表只输出6 Bob。我想能够打印出在linkedlist的一切不只是最后输入。

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

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

另外,不要每次在循环中都重新创建Scanner。一次就够了。

问题是您将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");
        }
    }
}

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

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

你正在调用你上次设置的相同的值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;
    }
}

修改文本编辑器:

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

相关内容

  • 没有找到相关文章

最新更新