Signaler

Problème d'assignation d'objet dans un tableau [Résolu]

Posez votre question OmeGaFire_ 82Messages postés dimanche 19 juin 2016Date d'inscription 25 mai 2017 Dernière intervention - Dernière réponse le 22 avril 2017 à 19:30 par OmeGaFire_
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.
Afficher la suite 
Utile
+0
plus moins
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.
OmeGaFire_ 82Messages postés dimanche 19 juin 2016Date d'inscription 25 mai 2017 Dernière intervention - 21 avril 2017 à 23:51
Mais je ne peux pas lui donner un nombre illimité de cases dès sa création ?
Répondre
KX 14290Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 28 mai 2017 Dernière intervention - 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);
Répondre
OmeGaFire_ 82Messages postés dimanche 19 juin 2016Date d'inscription 25 mai 2017 Dernière intervention - 22 avril 2017 à 18:48
Je connaissait les ArrayLists, mais elles marchent de la même façon que les tableaux sur le stockage ?
Répondre
KX 14290Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 28 mai 2017 Dernière intervention - 22 avril 2017 à 19:00
La structure interne d'une ArrayList c'est un tableau (d'où son nom Array = Tableau)

La classe ArrayList masque les difficultés liées au tableau (comme le redimensionnement) afin de rendre son utilisation plus simple, mais dans son fonctionnement - notamment en terme de performances - c'est la même chose.
Répondre
OmeGaFire_ 82Messages postés dimanche 19 juin 2016Date d'inscription 25 mai 2017 Dernière intervention - 22 avril 2017 à 19:30
Ok merci :) Je met cette discussion en résolue !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !