删除数组元素 - 将所有元素向下移动一个索引

时间:2013-11-28 11:03:52

标签: java arrays sorting

我有一些代码允许用户从他们选择的数组中删除一个元素但是我想要将所有现有元素“向下移动”,这样就不会在数组中留下任何空隙。

目前,如果删除第一个元素(索引0),它将被删除,但如果我向数组添加信息,则在索引1处输入,索引0保留为空。如果从包含以下索引中的信息的索引中删除某些内容,如何将所有信息移到一个索引中?

我的删除方法:

  static void deleteStudent() {
    System.out.println("Wish student would you like to delete?");
    for(int i=0;i<9;i++) {
      System.out.println(i + ": " + studentNamesArray[i]);
    }
    int studentChoice = input.nextInt();
    for(int i = studentChoice+1; i<studentNamesArray.length; i++) {
      studentNamesArray[i-1] = studentNamesArray[i];
    }
  }

编辑:

我在数组中添加了四个条目: [one, two, three, four, null, null, null, null, null, null]

我跑了然后程序并试图删除索引[2],这是成功输出以下内容: [one, two, four, null, null, null, null, null, null, null]

因为你可以看到按需要移动的元素,问题是当我再次向数组添加一个值时,删除的索引被传递并且元素被输入到下一个索引中,见下文: [one, two, four, null, newadd, null, null, null, null, null]

如何让程序将新值输入正确的数组?

添加方法:

  static void addStudent() {
    if (nameArrayCount < 10) {
      System.out.println("Enter the student's name in the following format - surname, forename: ");
      studentName = input.next();
      studentNamesArray[nameArrayCount] = studentName;
      nameArrayCount = nameArrayCount + 1;
    }
    else if (nameArrayCount == 10) {
      System.out.println("******Array is full, please delete a student before adding another.*****");
    }
    if (markArrayCount < 10){
    System.out.println("Enter the first mark: ");
          markOne = input.nextInt();
          System.out.println("Enter the second mark: ");
          markTwo = input.nextInt();
          System.out.println("Enter the third mark: ");
          markThree = input.nextInt();
          studentMarksArray[markArrayCount][0] = markOne;
          studentMarksArray[markArrayCount][1] = markTwo;
          studentMarksArray[markArrayCount][2] = markThree;
          markArrayCount = markArrayCount + 1;
    }
  }

5 个答案:

答案 0 :(得分:2)

我重写了你的代码,但添加了一个临时数组,它存储除了第一个索引位置中已删除元素之外的所有值。这应该删除元素并将数组移到最左边的位置,最右边的位置保持为空。

static void deleteStudent() {
    System.out.println("Which student would you like to delete?"); //fixed spelling error
    for(int i=0;i<9;i++) {
      System.out.println(i + ": " + studentNamesArray[i]);
    }
    int studentChoice = input.nextInt();
    StudentName[] temp = new StudentName[studentNamesArray.length];//I don't know format
    for(int i = 0; i<studentNamesArray.length; i++) {
        if(i != studentChoice)
        {
            temp[j] = studentNamesArray[i]
            j++;
        }
    }
    temp[studentNamesArray.length-1] = null;
    studentNamesArray = temp;
}

答案 1 :(得分:0)

尝试使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

您可以查看java.util.ArrayList.remove(int index)方法实现以获取更多详细信息。

答案 2 :(得分:0)

您可以声明一个包含少量元素的新数组,并使用

复制相关值

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy(java.lang.Object,int,java.lang.Object,int,int)

答案 3 :(得分:0)

您可以使用size = studentsArray-1创建临时数组,然后复制studentsArray中的所有元素,但必须删除的元素除外。

int studentNamesArraySize = studentNamesArray.length;
String [] temp = new String[studentNamesArray.length];
int internalCounter = 0;
for(int i=0;i<studentNamesArraySize; ++i){
    if( i != studentChoice ){
        temp[internalCounter] = studentNamesArray[i];
        internalCounter++;
    }
}
temp[temp.length] = null;
studentNamesArray = temp;

答案 4 :(得分:0)

这是我的最终解决方案:

static int nameArrayCount, markArrayCount = 0;

  static void deleteStudent() {
    System.out.println("Which student would you like to delete?");
    for(int i=0;i<10;i++) {
      System.out.println(i + ": " + studentNamesArray[i]);
    }
    int studentChoice = input.nextInt();
    for(int i = studentChoice+1; i<studentNamesArray.length; i++) {
      studentNamesArray[i-1] = studentNamesArray[i];
    }
    nameArrayCount = nameArrayCount -1;
  }