Problème d'assignation d'objet dans un tableau

Résolu/Fermé
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018 - 20 avril 2017 à 02:08
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018 - 22 avril 2017 à 19:30
Bonjour,
J'ai écrit un code qui, à chaque instance d'un objet spécifié, fait une copie de cet objet dans un tableau. Seulement, cette partie de code fait planter mon code pour une ArrayOutOfBoundsException.

Code:

package fr.killuaah.cmd.cmdmanager;


public class Command {

int argsNumber;
String prefix;





public Command(int argsNumbers, String prefixx) {

commandManager.commandsInstances++;
commandManager.commandrep[commandManager.commandsInstances-1] = this;



//Variables de l'objet
argsNumber = argsNumbers;
prefix = prefixx;




La classe principale, où les tableaux sont créés:

package fr.killuaah.cmd.cmdmanager;

import java.util.Scanner;



public class commandManager {

public static int commandsInstances = 0;
public static Command[] commandrep = {};
public static void main(String[] args) {
// TODO Auto-generated method stub

boolean b = true;
String[] command;
Command c = new Command(4,"salut");

while (b) {
System.out.print(">>");
Scanner sc = new Scanner(System.in);
command = sc.nextLine().split(" ");
System.out.println(commandManager.commandsInstances);
}




}




}








L'erreur:



Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at fr.killuaah.cmd.cmdmanager.Command.<init>(Command.java:16)
at fr.killuaah.cmd.cmdmanager.commandManager.main(commandManager.java:16)


Merci de m'aider c:
Bonne journée.
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 avril 2017 à 19:18
Bonjour,

ArrayIndexOutOfBoundsException: 0
signifie que tu essayes d'accéder à la case 0 qui n'existe pas, ce qui est normal puisque ton tableau est initialisé avec
commandrep = {}
et qu'il est donc de taille 0...

Il faudrait que le tableau ait au moins une taille de 1 pour utiliser la case 0.
0
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
21 avril 2017 à 12:52
Donc à chaque fois que je veux utiliser une case je dois l'initialiser avant ? :c
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
21 avril 2017 à 19:52
C'est le tableau qu'il faut initialiser.
Un tableau avec 0 case tu ne pourras pas en faire grand chose...
0
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
21 avril 2017 à 23:51
Mais je ne peux pas lui donner un nombre illimité de cases dès sa création ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
22 avril 2017 à 18:14
Non, aucun objet n'a jamais de taille illimité car il faut toujours que le système d'exploitation (via la JVM) puisse réserver un espace mémoire contiguë permettant de stocker cet objet.

Mais si tu veux faire un espace de stockage "illimité" il faudrait plutôt que tu regardes comment fonctionnent les listes. Il y en a plusieurs implémentations mais par exemple les ArrayList ont une capacité qui se redimensionne automatiquement par copier-coller de ses éléments d'un tableau à un autre plus grand.

Exemple :

List<Command> commandRep = new ArrayList<Command>();
Command command = ...
commandRep.add(command);
0
OmeGaFire_ Messages postés 83 Date d'inscription dimanche 19 juin 2016 Statut Membre Dernière intervention 19 janvier 2018
22 avril 2017 à 18:48
Je connaissait les ArrayLists, mais elles marchent de la même façon que les tableaux sur le stockage ?
0