IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Erreur dans l'accès au contenu de tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 34
    Par défaut Erreur dans l'accès au contenu de tableau
    je suis novice en java est j'ai un petit problème que je comprend pas aider moi a la résoudre (l'erreur est entre commentaire ici dessous)
    merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    import java.util.Scanner;
     
    public abstract class employe {
    	private String nom,prenom;
    	private short age;
    	public employe() {}
    	public employe(String n,String p,short a) {
    		nom=n;
    		prenom=p;
    		age=a;
    	}
    	public void saisir() {
    		Scanner sc=new Scanner(System.in);
    		System.out.println("donner respectivement le nom, prenom, age:");
    		nom=sc.nextLine();
    		prenom=sc.nextLine();
    		age=sc.nextShort();
    	}
    	public void afficher() {
    		System.out.println("Nom: "+nom+"Prenom "+prenom+"Age :"+age);
    	}
    	abstract float salaire();
     
    }
     
    public class ouvrier extends employe {
    	private float nbh,sal;
    	public ouvrier(){}
    	public ouvrier(String n,String p,short a,float nh,float s) {
    		super(n,p,a);
    		nbh=nh;
    		sal=s;
    	}
    	public void saisir(){
    		super.saisir();
    		Scanner sc=new Scanner(System.in);
    		System.out.println("entrer respectivement le nombre d'heure et le salaire: ");
    		nbh=sc.nextFloat();
    		sal=sc.nextFloat();
    	}
    	public void afficher() {
    		super.afficher();
    		System.out.println("nombre d'heure: "+nbh+"salaire/heure "+sal);
    	}
     
    	@Override
    	float salaire() {
    		// TODO Auto-generated method stub
    		return nbh*sal;
     
    	}
     
    }
    public class entreprise {
    	private int nbe;
    	private employe[] emp;
    	public entreprise() {
    		nbe=0;
    		emp=new employe[nbe];
    	}
    	public void ajouter(employe e) {
    		emp[nbe]=e;//l'erreur est dans cette ligne:aie:
    		nbe++;
    	}
    	public void saisir() {
    		for(int i=0;i<nbe;i++)
    			emp[i].saisir();
    	}
    	public void afficher() {
    		for(int i=0;i<nbe;i++)
    			emp[i].afficher();
    	}
    	public float salaire() {
    		float sal=0;
    		for(int i=0;i<nbe;i++)
    			sal+=emp[i].salaire();
    		return sal;
     
    	}
     
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		entreprise e=new entreprise();
    		ouvrier o=new ouvrier();
    		e.ajouter(o);
    		e.saisir();	
    	}
     
    }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 53
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class entreprise {
    private int nbe;
    private employe[] emp;
    public entreprise() {
    nbe=0; 
    emp=new employe[nbe]; // L'erreur est plutôt ici, tu initialises un tableau de taille nulle qui ne pourra donc contenir aucun élément.
    }
    public void ajouter(employe e) {
    emp[nbe]=e;//l'erreur est dans cette ligne ==> NON
    nbe++;
    }

  3. #3
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut Taille de tableaux
    Le problem c'est que quand tu declare un tableau tu dois lui donner une taille definie qui est chianta a changer apres (sauf si tu crée un secon tableau qui lui est recrée au besoin a la bonne taille et dans le quel tu transfere ton ancien tableau + l'objet en plus a y ajouter mais c pas evident a gerer et plustot brouillon comme code)

    si tu a besoin d'un stockage dynamique ( qui s'adapte a la taille au fur et a mesure) il est peut etre plus simple de passer par une collection ou un hashtable
    regarde dans la doc
    c super pratique surtout que tu peux directement efacer des elements dedans sans creer de vides car elles sont automatiquement comblées par le redecalage de ce qui se trouve derriere

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 34
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public class entreprise {
    	private int nbe;
    	private int nbemax;
    	private employe[] emp;
    	public entreprise() {
    		nbe=0;
    		nbemax=40;
    		emp=new employe[nbemax];
    	}
    	public void ajouter(employe e) {
    		if(nbe<nbemax) {
    			emp[nbe]=e;
    			nbe++;
    		}
    		else {
    			employe[] temp=new employe[nbemax];
    			for(int i=0;i<nbe;i++)
    				temp[i]=emp[i];
    			emp=new employe[nbemax*2];
    			for(int i=0;i<nbe;i++)
    				emp[i]=temp[i];
    			nbemax*=2;
    			ajouter(e);	
    		}
    	}
    oui merci voila j'ai corrigé selon ta première suggestion je vais regardé comment faire pour la deuxième l'important que j'ai localisé l'erreur
    pas facile pour un ancien c++yen

  5. #5
    Membre actif
    Avatar de Grumphette
    Homme Profil pro
    Validation manager
    Inscrit en
    Juillet 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Validation manager

    Informations forums :
    Inscription : Juillet 2008
    Messages : 81
    Par défaut
    Tu sais que les ArrayList sont la pour faire du Dynamique. Pas besoin d'avoir de taille défini!!!^^. ça evite de faire de la copie bestial de tableau. La encore ça passe, mais quand il va y avoir un paquet de donnée ton pc va pedaler dans la semoule ^^

  6. #6
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Par défaut
    C'est clair que les arraylistes sont un peux plus lourdes a gerer mais au niveaux des simples programmes tel qu'on les fait en tan que debutant on est loin quand meme de faire pleurer le pc lol

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Pour la copie de tableau, utilise "System.arraycopy", ce sera beaucoup plus rapide que la boucle "for". En plus, deux déclaration de tableau au lieu d'une seule, dommage !
    Voici une méthode plus rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class entreprise
    {
      private int nbe;
      private employe[] emp;
     
      public entreprise()
      {
        nbe = 0;
        emp = new employe[ 40 ];
      }
     
      public void ajouter( employe e )
      {
        if( nbe >= emp.length )
        {
          employe[] tmp = new employe[ emp.length * 2 ];
          System.arraycopy( emp, 0, tmp, 0, emp.length );
        }
     
        emp[ nbe ] = e;
        ++nbe;
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. Accés au contenu d'une balise span dans un tableau
    Par matthias.21 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/11/2010, 18h53
  2. Afficher du texte dans un Etat: Message d'erreur dans acces.
    Par nodogeid dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2007, 10h20
  3. Réponses: 2
    Dernier message: 11/04/2007, 18h25
  4. Réponses: 3
    Dernier message: 24/01/2007, 23h40
  5. Réponses: 5
    Dernier message: 29/11/2006, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo