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

Résolu
OmeGaFire_ Messages postés 99 Statut Membre -  
OmeGaFire_ Messages postés 99 Statut Membre -
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 19031 Statut Modérateur 3 020
 
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 99 Statut Membre
 
Donc à chaque fois que je veux utiliser une case je dois l'initialiser avant ? :c
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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 99 Statut Membre
 
Mais je ne peux pas lui donner un nombre illimité de cases dès sa création ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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 99 Statut Membre
 
Je connaissait les ArrayLists, mais elles marchent de la même façon que les tableaux sur le stockage ?
0