在 Java 中向 ArrayList 添加控制台输入

Adding console input to ArrayList in Java

提问人:LittleLamb 提问时间:11/27/2022 更新时间:11/28/2022 访问量:224

问:

我正在尝试将控制台输入和扫描仪输入中的项目添加到 java 中的数组列表。 (运行程序的用户类型 Program ID)

问题是每次我运行程序时,数组列表的内容都会更新为仅当时输入的内容。我希望数组列表包含所有已输入的输入。

public class User{

private static List<String> listNames = new ArrayList<String>();
private static List<Integer> listIds = new ArrayList<Integer>();

public static void main(String[] args)
    {
        int tempID = 5000;
        if (args.length>0) tempID= Integer.parseInt(args[0]);
        System.out.println("Login  "+tempID);
  
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter your Name : ");
        tempName = scanner.nextLine();
        
        User n = new User();
        n.ID= tempID;
        n.name = tempName;
        listIds.add(n.ID);
        listNames.add(n.name);

        }
     }


}

有谁知道这是否可能?

Java ArrayList 输入 控制台 java.util.scanner

评论

0赞 Idle_Mind 11/27/2022
显然,您是新手,因此使用数据库系统可能不是一个好的起点。查找如何读取和写入 TEXT 文件,以便从某个地方开始......

答:

0赞 Referium 11/27/2022 #1

每次编译程序时,都会创建新的数组。因此,您需要另一种保存输入的方法,例如在 SQL 数据库中,或者您可以使用循环无限运行程序,每次都请求一个新条目,然后像您已经做的那样使用扫描程序收集它,但使用该方法,您不能对数组条目执行任何操作,因为您对条目的请求永远不会停止。

0赞 turrnut 11/27/2022 #2

每次运行程序时,它都会初始化一个不同的数组。为了解决这个问题,您可以将数据存储在 MySQL 或 Oracle 等数据库中。但是解决这个问题的更有效方法是将你的 ArrayList 保存为本地对象,
我编写了以下 2 个函数
java.io.ObjectInputStreamjava.io.ObjectOutputStream

public static ArrayList<Object> loadArrayList(String filename)
{
    ObjectInputStream ois = null;
    try {
        ois = new ObjectInputStream(new FileInputStream(filename));
        ArrayList<Object> arr = (ArrayList<Object>) ois.readObject();
        return arr;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
        return null;
    } finally {
        if (ois != null) {
            try {
                ois.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}   
public static void saveArrayList(ArrayList<Object> arr, String filename)

{
    ObjectOutputStream oos = null;
    try {
        oos = new ObjectOutputStream(new FileOutputStream(filename));
        oos.writeObject(arr);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (oos != null) {
            try {
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

使用第一个参数调用是 ArrayList 实例,第二个参数调用 filename。然后,您可以使用参数为 is your filename 的方法从本地文件系统加载。
在您的例子中,只需在用户退出程序时调用该方法,然后调用 从以前的输入中获取所有元素,以恢复用户的进度
saveArrayListloadArrayListsaveArrayListloadArrayList

评论

0赞 LittleLamb 11/27/2022
嘿,谢谢你。我有点困惑为什么我会加载一个文件?
0赞 turrnut 11/29/2022
因为当您将 ArrayList 作为对象存储在本地文件系统中时,它存在于文件中,并且当您的程序再次启动时,它需要获取 ArrayList 中已经存在的数据,为此,您需要从本地文件系统加载文件。