如何根据JAVA中的用户输入从数组中删除和添加元素?

时间:2019-03-23 00:14:02

标签: java arrays

String[] courseNames=new String[numbOfCourses]; 
Double[] courseCredits=new Double[numbOfCourses];
String[] gradeLetters= new String[numbOfCourses];

我要求用户输入一些课程名称,学分和字母,然后将它们放在每个数组中,例如:

courseNames[j]= keyboard.next();
courseCredits[j]=keyboard.nextDouble();
gradeLetters[j]=keyboard.next();

我希望输出像

之前:

course numb     course name      course credit   course Grade
1                    C               3.0              A
2                    B               3.0              B
3                    D               3.0              A

用户输入:2

之后:

course numb     course name      course credit   course Grade
1                    C               3.0              A
2                    D               3.0              A

1 个答案:

答案 0 :(得分:0)

首先,我强烈建议您使用某种列表,因为这样可以更轻松地实现所需的效果。

要从数组中“删除”项目,可以创建类似于以下内容的方法:

void deleteCourseAtIndex(int index) {
    courseNames[index]= null;
    courseCredits[index]= null;
    gradeLetters[index]= null;
}

然后在执行printf()以显示数组的内容时:

for (int i = 0; i < courseNames.length; i++) {
    if (courseNames[i] != null)
        //printf() with whatever formatting you have
}

要添加新课程,您必须在数组中具有足够的索引来存储新课程。这就是为什么我建议您使用列表的原因。尽管如此:

//This method adds course info to the arrays and returns a boolean whether it was successfully added
//Precondition: all arrays are the same length
boolean addCourse(String[] cNames, double[] cCredits, String[] gLetters) {
    boolean added = false;
    for (int i = 0; i < courseNames.length; i++) {
        if (courseNames[i] == null) {
            courseNames[i]= cNames;
            courseCredits[i]= cCredits;
            gradeLetters[i]= gLetters;
            added = true;
        }
    }
    return added;
}

使用列表,您不必处理空间不足的问题,因为在初始化它们时它们没有固定的大小。为此,请尝试执行以下操作:

ArrayList<String> courseNames= new ArrayList<String>(); 
ArrayList<Double> courseCredits = new ArrayList<Double>();
ArrayList<String> gradeLetters = new ArrayList<String>();

请注意,我使用Double而不是double,因为double是基元,并且ArrayLists不能使用基元。使用列表时,请使用包装器类Integer,Double等。

现在,当您接受键盘输入时:

courseNames.add(keyboard.next());
courseCredits.add(keyboard.nextDouble());
gradeLetters.add(keyboard.next());

您甚至不需要遍历每个索引!

更好的是,您可以创建一个全新的课程,称为Course(如Andreas所建议),并创建一个ArrayList。