Supprimer l'élément de tableau - déplacer tous les éléments de descendre d'un indice de
J'ai un code qui permet à un utilisateur pour supprimer un élément d'un tableau qu'ils choisissent cependant je veux la déplacer tous les éléments "en bas d'un" il n'y a pas de lacunes à gauche dans le tableau.
À l'heure actuelle si je supprime le premier élément (indice 0), il est supprimé, mais si j'ai ajouter les informations dans le tableau, il est entré à l'indice 1 et l'indice 0 est laissé null. Si quelque chose est supprimé à partir d'un index qui contient des renseignements dans les indices suivants comment puis-je déplacer toutes les informations pour descendre d'un indice?
Ma méthode delete:
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];
}
}
EDIT:
J'ai ajouté des quatre entrées de la matrice:
[one, two, three, four, null, null, null, null, null, null]
J'ai couru de programme et essayé de supprimer l'index [2]
, cela a été un succès pour la sortie suivante:
[one, two, four, null, null, null, null, null, null, null]
comme vous pouvez le voir les éléments où est déplacée vers le bas que l'on veut, le problème est alors, quand j'ai ajouter une valeur dans le tableau de nouveau supprimés de l'index est passé au-dessus et l'élément est entré dans le prochain indice, voir ci-dessous:
[one, two, four, null, newadd, null, null, null, null, null]
Comment puis-je avoir le programme en entrant une nouvelle valeur dans le tableau correct?
Méthode Add:
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;
}
}
- Vous pouvez utiliser ArrayList.
- Malheureusement pour les fins du présent I ne peut pas utiliser de liste de tableaux ou que le tableau d'importation
- stackoverflow.com/questions/20254914/...
- Posté édité avec de nouvelles informations.
Vous devez vous connecter pour publier un commentaire.
J'ai réécrit votre code, mais a ajouté un temp tableau qui stocke toutes les valeurs, sauf pour l'élément supprimé dans la première position d'index de l'avant. Cela devrait supprimer l'élément de décalage et de la matrice la plus à gauche dans la position la plus à droite à gauche, comme null.
nameArrayCount
que je suis en ajoutant 1 à chaque fois qu'un élément est ajouté, donc si j'ajoute 4 puis le comte est à 3 mais si je supprime [1] le compte est toujours à 3 alors quand j'ai ajouter un nouvel élève le compte passe à 4.nameArrayCount = nameArrayCount -1;
à la fin de la méthode delete et il semble fonctionner.Vous pouvez déclarer un nouveau tableau d'en avoir un à moins d'élément et de copier les valeurs correspondantes à l'aide de
http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy(java.lang.Objet, int, java.lang.Objet, int, int)
Essayez d'utiliser
System.arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
Vous pouvez voir
java.util.ArrayList.remove(int index)
méthode mise en œuvre pour plus de détails.Vous pouvez créer des tableau temporaire avec taille = studentsArray-1, puis copiez tous les éléments de studentsArray à l'exception de l'élément qui doit être retiré.
C'était ma dernière solution:
static int nameArrayCount, markArrayCount = 0;