提问人:LittleLamb 提问时间:11/27/2022 更新时间:11/28/2022 访问量:224
在 Java 中向 ArrayList 添加控制台输入
Adding console input to ArrayList in Java
问:
我正在尝试将控制台输入和扫描仪输入中的项目添加到 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);
}
}
}
有谁知道这是否可能?
答:
0赞
Referium
11/27/2022
#1
每次编译程序时,都会创建新的数组。因此,您需要另一种保存输入的方法,例如在 SQL 数据库中,或者您可以使用循环无限运行程序,每次都请求一个新条目,然后像您已经做的那样使用扫描程序收集它,但使用该方法,您不能对数组条目执行任何操作,因为您对条目的请求永远不会停止。
0赞
turrnut
11/27/2022
#2
每次运行程序时,它都会初始化一个不同的数组。为了解决这个问题,您可以将数据存储在 MySQL 或 Oracle 等数据库中。但是解决这个问题的更有效方法是将你的 ArrayList 保存为本地对象,
我编写了以下 2 个函数java.io.ObjectInputStream
java.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 的方法从本地文件系统加载。
在您的例子中,只需在用户退出程序时调用该方法,然后调用 从以前的输入中获取所有元素,以恢复用户的进度saveArrayList
loadArrayList
saveArrayList
loadArrayList
评论
0赞
LittleLamb
11/27/2022
嘿,谢谢你。我有点困惑为什么我会加载一个文件?
0赞
turrnut
11/29/2022
因为当您将 ArrayList 作为对象存储在本地文件系统中时,它存在于文件中,并且当您的程序再次启动时,它需要获取 ArrayList 中已经存在的数据,为此,您需要从本地文件系统加载文件。
下一个:虽然条件不满足,但仍在继续
评论