在Java中,我想在我的arraylist中添加一个值..但它有点不起作用。我做错了什么?
这是我的代码:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.print("Show List = 2");
System.out.println();
System.out.print("delete list delete = 3");
System.out.println();
System.out.print("Enter: ");
String entry = br.readLine();
int choice = Integer.parseInt(entry);
if (choice == 1) {
System.out.print("Which value do you want to add: ");
String newValue = br.readLine();
System.out.print("The value " + newValue + " has been added");
myList.add(new String (newValue));
}
else if (choice == 2) {
for (int i = 0; i < myList.size(); i++) {
System.out.print(myList.get(i));
}
}
else {
myList.clear();
System.out.print("ArrayList deleted");
}
}
}
答案 0 :(得分:1)
我建议做这样的事情,while
循环将阻止程序被关闭,因为每次程序重新重新启动时,都会在内存中创建一个新的空ArrayList
。
public static void main(String[] args) throws IOException {
ArrayList <String> myList = new ArrayList<String>();
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {
while(true) {
System.out.println("Add new value = 1");
System.out.println("Show the list = 2");
System.out.println("Delete the list = 3");
System.out.println("Exit = 4");
System.out.print("Enter: ");
String entry = br.readLine();
int choice = Integer.parseInt(entry);
switch (choice){
case 1:
System.out.print("Which value do you want to add: ");
String newValue = br.readLine();
System.out.println("The value " + newValue + " has been added");
myList.add(newValue);
break;
case 2:
for (String s : myList) {
System.out.print(s + " ");
}
break;
case 3:
myList.clear();
System.out.println("ArrayList deleted");
break;
default:
throw new InterruptedException("Close program");
}
}
} catch (InterruptedException e) {
}
}
其他一些提示:
new String()
,因为它会在内存中创建一个新的String
,而您将无法从字符串的不变能力中受益。println(something)
代替print(something) then println()
。switch
而不是if else
来测试枚举值总是更可取。 修改:要在reverse
中显示列表,请将此case
添加到switch
:
case 4:
for(int i = myList.size() - 1; i >= 0; i--){
System.out.print(myList.get(i) + " ");
}
break;
答案 1 :(得分:0)
每次运行代码时都会初始化ArrayList。它不会作为文件保存在存储中。
如果在程序关闭时需要存储ArrayList值,则需要写入文件并将其解析为代码开头的ArrayList。
答案 2 :(得分:-1)
看起来你为初学者犯了一个很常见的错误。一旦执行了程序,它将运行一次选择然后结束。这意味着您的数组列表会被或多或少地销毁。因此,当您再次运行该程序时,您正在创建一个空的新数组列表。快速修复只是将整个程序放入while循环中,以便运行一定量的转弯。这将允许您从列表中添加,删除等。更复杂的方法是将列表保存到文件并每次填充它。