【问题标题】:Adding console input to ArrayList in Java在 Java 中将控制台输入添加到 ArrayList
【发布时间】:2022-12-17 00:14:15
【问题描述】:

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

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

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

        }
     }


}

有谁知道这是否可能?

【问题讨论】:

  • 显然您是新手,因此使用数据库系统可能不是一个好的起点。查找如何读取和写入 TEXT 文件以从某处开始...

标签: java arraylist input console java.util.scanner


【解决方案1】:

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

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

调用 saveArrayList,第一个参数是您的 ArrayList 实例,第二个参数是文件名。然后,您可以使用 loadArrayList 方法从本地文件系统加载,参数是您的文件名。
在您的情况下,只需在用户退出程序时调用 saveArrayList 方法并调用 loadArrayList 以从先前的输入中获取所有元素以恢复用户的进度

【讨论】:

  • 嘿,谢谢你。我对为什么要加载文件有点困惑?
  • 因为当您将 ArrayList 作为对象存储在本地文件系统中时,它存在于一个文件中,当您的程序再次启动时,它需要获取 ArrayList 中已经存在的数据,为此,您需要加载来自本地文件系统的文件。
【解决方案2】:

每次编译程序时,都会创建新的数组。所以你需要另一种方法来保存你的输入,比如在 SQL 数据库中,或者你可以用一个循环无限地运行你的程序,每次都询问一个新的条目,并像你已经做的那样用扫描器收集它,但是使用那个方法,你可以做数组条目没有任何内容,因为您对条目的要求永远不会停止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多