Verwijder array-element – verplaats alle elementen één index omlaag

Ik heb code waarmee een gebruiker een element kan verwijderen uit een array die ze selecteren, maar ik wil dan alle bestaande elementen “één omlaag” verplaatsen, zodat er geen gaten meer in de array zijn.

Als ik op dit moment het eerste element (index 0) verwijder, wordt het verwijderd, maar als ik informatie aan de array toevoeg, wordt het ingevoerd bij index 1 en wordt index 0 null gelaten. Als er iets wordt verwijderd uit een index die informatie bevat in de volgende indexen, hoe kan ik dan alle informatie één index omlaag verplaatsen?

Mijn verwijderingsmethode:

 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];
    }
  }

BEWERKEN:

Ik heb vier items aan de array toegevoegd:
[one, two, three, four, null, null, null, null, null, null]

Ik heb toen het programma uitgevoerd en geprobeerd index [2]te verwijderen, dit was succesvol met het volgende:
[one, two, four, null, null, null, null, null, null, null]

Zoals je kunt zien dat de elementen naar beneden zijn verplaatst zoals gewenst, is het probleem dat wanneer ik opnieuw een waarde aan de array toevoeg, de verwijderde index wordt doorgegeven en het element wordt ingevoerd in de volgende index, zie hieronder:
[one, two, four, null, newadd, null, null, null, null, null]

Hoe kan ik het programma de nieuwe waarde in de juiste array laten invoeren?

Methode toevoegen:

 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;
    }
  }

Antwoord 1, autoriteit 100%

Ik heb je code herschreven maar een tijdelijke array toegevoegd die alle waarden opslaat behalve het verwijderde element in de eerste indexpositie en verder. Dit zou het element moeten verwijderen en de array naar de meest linkse positie moeten verschuiven met de meest rechtse positie links als null.

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;
}

Antwoord 2

U zou een nieuwe array kunnen declareren met één minder element en de relevante waarden kopiëren met

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


Antwoord 3

Probeer gebruik System.arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);

U kunt java.util.ArrayList.remove(int index)methode implementatie voor meer details.


Antwoord 4

U kunt tijdelijke array maken met MAATSE = Studenten-1 en kopieer vervolgens alle elementen van studentenarray, behalve het element dat moet worden verwijderd.

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;

Antwoord 5

Dit was mijn laatste oplossing:

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;
  }

Other episodes