Java 与ArrayList循环
我有一段代码,它涉及到处理Java 与ArrayList循环,java,arraylist,do-while,Java,Arraylist,Do While,我有一段代码,它涉及到处理ArrayList名称的任务 这包括在ArrayList中添加元素、显示ArrayList的元素、删除ArrayList中的元素、编辑ArrayList中的元素等功能 我的问题是,当我在ArrayList中添加一个新名称时,当代码循环返回并且我想查看ArrayList中的元素时,它会变成空的 import java.util.ArrayList; import java.util.Scanner; public class mainRunner { publi
ArrayList
名称的任务
这包括在ArrayList
中添加元素、显示ArrayList
的元素、删除ArrayList
中的元素、编辑ArrayList
中的元素等功能
我的问题是,当我在ArrayList
中添加一个新名称时,当代码循环返回并且我想查看ArrayList
中的元素时,它会变成空的
import java.util.ArrayList;
import java.util.Scanner;
public class mainRunner {
public static void main(String[] args) {
String con;
do {
menuCaller();
System.out.println("Do you want to continue[Y/N]");
Scanner confirm = new Scanner(System.in);
con = confirm.nextLine();
} while (con.equalsIgnoreCase("y"));
}
public static void menuCaller() {
int choice;
ArrayList names = new ArrayList();
int firstIndex =0;
Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
Scanner scaned = new Scanner(System.in);
System.out.println("Menu"
+"\n[1] Add Name"
+ "\n[2] Display All Record"
+ "\n[3] Delete a Record"
+ "\n[4] Edit a R1ecord "
+ "\n[5] Exit");
choice = scaned.nextInt();
if (choice == 1) {
System.out.println("***ADDING NAMES***");
System.out.println("Enter the name of the Student");
String addName = scan.next();
names.add(addName);
System.out.println("Record Added !!!");
}
else if (choice == 2) {
System.out.println("***Database Content**");
System.out.println("------------------------");
System.out.println("Record # | Name ");
for (int index = firstIndex; index < names.size(); ++index) {
System.out.println("--------------------");
System.out.println(" " + index + " | " +names.get(index));
}
}
else if (choice == 3) {
System.out.println("***Delete A Record***");
System.out.print("Enter a number to be deleted: ");
int numDelete = scan.nextInt();
names.remove(numDelete);
System.out.println("Record Deleted");
}
else if (choice == 4) {
System.out.println("***Edit Record***");
System.out.println("***Database Content**");
System.out.println("------------------------");
System.out.println("Record # | Name ");
for (int index = firstIndex; index < names.size(); ++index) {
System.out.println("--------------------");
System.out.println(" " + index + " | " +names.get(index));
}
System.out.println("Enter the Name to be Edited");
String nameEdited = scan.next();
if (names.indexOf(nameEdited) >= 0) {
System.out.print("Change to: ");
String nameChange = scan2.next();
names.set(names.indexOf(nameEdited), nameChange);
}
else {
System.out.println("Record Not Existing");
}
}
else if (choice == 5) {
System.out.println("Thank you for using the Program");
System.exit(choice);
}
else {
System.out.println("Wrong Choice");
}
}
}
import java.util.ArrayList;
导入java.util.Scanner;
公营班主任{
公共静态void main(字符串[]args){
字符串con;
做{
梅努卡勒();
System.out.println(“是否继续[Y/N]”;
扫描仪确认=新扫描仪(System.in);
con=confirm.nextLine();
}while(con.equalsIgnoreCase(“y”));
}
公共静态void menuCaller(){
智力选择;
ArrayList name=新的ArrayList();
int firstIndex=0;
扫描仪扫描=新扫描仪(System.in);
扫描仪scan2=新扫描仪(System.in);
扫描扫描仪=新扫描仪(System.in);
System.out.println(“菜单”
+“\n[1]添加名称”
+“\n[2]显示所有记录”
+“\n[3]删除记录”
+“\n[4]编辑一份记录”
+“\n[5]退出”);
choice=scanned.nextInt();
如果(选项==1){
System.out.println(“***添加名称***”);
System.out.println(“输入学生姓名”);
字符串addName=scan.next();
名称。添加(addName);
System.out.println(“添加的记录!!!”;
}
else if(选项==2){
System.out.println(“***数据库内容**”);
System.out.println(“---------------------------”);
System.out.println(“记录#|名称”);
for(int index=firstIndex;index=0){
系统输出打印(“更改为:”);
字符串nameChange=scan2.next();
names.set(names.indexOf(nameEdited)、nameChange);
}
否则{
System.out.println(“记录不存在”);
}
}
else if(选项==5){
System.out.println(“感谢您使用该程序”);
系统退出(选择);
}
否则{
System.out.println(“错误选择”);
}
}
}
每次调用menuCaller
,都会创建一个新列表
也许您应该在main
方法中创建它,并将引用传递到menuCaller
:
public static void main(String[] args) {
String con;
List<String> names = new ArrayList<>();
do{
menuCaller(names);
System.out.println("Do you want to continue[Y/N]");
Scanner confirm = new Scanner(System.in);
con = confirm.nextLine();
}while(con.equalsIgnoreCase("y"));
}
public static void menuCaller(List<String> names) {
...
// (No declaration of names here - it's a parameter now...)
...
}
publicstaticvoidmain(字符串[]args){
字符串con;
列表名称=新的ArrayList();
做{
美努卡勒(姓名);
System.out.println(“是否继续[Y/N]”;
扫描仪确认=新扫描仪(System.in);
con=confirm.nextLine();
}while(con.equalsIgnoreCase(“y”));
}
公共静态无效菜单栏(列表名称){
...
//(此处没有名称声明-现在是参数…)
...
}
每次调用menuCaller
,都会创建一个新列表
也许您应该在main
方法中创建它,并将引用传递到menuCaller
:
public static void main(String[] args) {
String con;
List<String> names = new ArrayList<>();
do{
menuCaller(names);
System.out.println("Do you want to continue[Y/N]");
Scanner confirm = new Scanner(System.in);
con = confirm.nextLine();
}while(con.equalsIgnoreCase("y"));
}
public static void menuCaller(List<String> names) {
...
// (No declaration of names here - it's a parameter now...)
...
}
publicstaticvoidmain(字符串[]args){
字符串con;
列表名称=新的ArrayList();
做{
美努卡勒(姓名);
System.out.println(“是否继续[Y/N]”;
扫描仪确认=新扫描仪(System.in);
con=confirm.nextLine();
}while(con.equalsIgnoreCase(“y”));
}
公共静态无效菜单栏(列表名称){
...
//(此处没有名称声明-现在是参数…)
...
}
在menuCaller()
中,您总是创建一个新的(空的)名称列表
。为什么每次要从System.In读取数据时都要创建新的扫描仪?创建一个并重复使用。在menuCaller()
中,您总是创建一个新的(空的)名称列表。为什么每次要从System.In读取数据时都要创建新的扫描仪?创建一个并重用它。Edward,请注意Jon在列表中添加了一个泛型类型名称
。请阅读这个问题,为什么要避免原始类型:Edward,请注意Jon在列表中添加了一个泛型类型names
。请阅读此问题,为什么要避免原始类型: