Problème tableau

antara3d Messages postés 6 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 25 février 2009 - 5 déc. 2008 à 18:03
antara3d Messages postés 6 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 25 février 2009 - 6 déc. 2008 à 13:59
Bonjour à tous

Merci de bien vouloir m'aider

Le travail à faire consiste à concevoir deux méethodes à ajouter dans la classe TransTab dont le code
source est listé ci-dessous

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class TransTab {
static String[] codeIdItemTab;
static int[] qItemTab;
static double[] prixItemTab;
static int[] codeTaxTab;
static void remplirTab(String nomFichier, int nombreTrans)throws FileNotFoundException{
Scanner lectureFichier = new Scanner (new File(nomFichier));
codeIdItemTab=new String[nombreTrans];
qItemTab=new int[nombreTrans];
prixItemTab=new double[nombreTrans];
codeTaxTab= new int[nombreTrans];
for (int i=0; i< nombreTrans && lectureFichier.hasNext(); i++){
codeIdItemTab[i]=lectureFichier.next();
qItemTab[i]=lectureFichier.nextInt();
prixItemTab[i]=lectureFichier.nextDouble();
codeTaxTab[i]= lectureFichier.nextInt();
}
}
}

La méthode remplirTab() ci-dessus a deux paramètres nomFichier et nombreTrans. nomFichier
représente le nom d'un �C;chier stockant les transactions une par ligne alors que nombreTrans est le nombre
de transactions dans ce fichier.

(1) Ajoutez a la classe TransTab une methode dont la signature est :
public static int[] selectQMinQmax(int qMin, int qMax, double prixSeuil);
et qui retourne un tableau d'entiers compose des numeros des cases des items dont la transaction
comporte une quantité supérieure ou égale a qMin et inférieure ou égale a qMax et dont le prix hors
taxe est supérieur ou égal a prixSeuil. Nous allons supposer que -1 indique la �C;n des éléments a
considérer dans le tableau retourne.

(2) Ajoutez a la classe TransTab une methode dont la signature est :
public static String[] listeItemIdCodeSansRedondance();
et qui retourne un tableau de String compose des codes alphanumériques identifiants les items
sans redondance. Lorsqu'un item fait l'objet de plusieurs transactions, son code identifiant doit
apparaître une seul fois dans le tableau retourne. En terme de traitement cela signifie qu'il faudrait
vérifier qu'un code identifiant d'un item n'existe pas dans encore dans le tableau ;a retourner avant
de l'y ajouter. Nous allons supposer que le String "FIN" indique la �C;n des éléments à considérer
dans le tableau retourne. Bien sure on suppose aussi qu'il n'y a aucun item ayant "FIN" comme
code identifiant.

A�C;n de concrétiser le problème, je vous donne l'exemple du �C;chier ListeTrans.TXT suivant:
AAA442945 88 4,83 3
X930275108 1 8,07 3
C105C85923 49 9,82 1
X930275108 37 5,3 0
AAA442945 45 9,61 1
X733635456 66 2,88 3
AAA442945 29 0,61 2
Y28522548 80 7,13 2
Y217997564 18 9,34 2
AAA442945 95 9,79 2
13GG492810 26 1,65 1
JK67484 28 4,8 1
Soit un programme pour tester les méthodes demandées:
import java.io.FileNotFoundException;
public class TestTransTab {
public static void main(String[] args) throws FileNotFoundException{
TransTab.remplirTab("ListeTrans.TXT", 12);
int[] tabEntiers= TransTab.selectQMinQmax(45, 80, 7.0);
System.out.println("Liste des numéros des cases pour les critères demandes");
int i=0;
for(i=0; tabEntiers [i] != -1 && i < tabEntiers.length; i++){
System.out.print(tabEntiers [i] + " ");
}
System.out.println(tabEntiers [i]);
System.out.println("Liste des codes identifiants :");
String[] tabStr= TransTab.listeItemIdCodeSansRedondance();
for(i=0; tabStr[i].compareTo("FIN") != 0 && i < tabStr.length; i++){
System.out.print(tabStr[i] + " ");
}
System.out.println(tabStr [i]);
}
}
Voila ce que ce programme de test est suppose afficher :
Liste des numéros des cases pour les critères demandes :
2 4 7 -1
Liste des codes identifiants
AAA442945 X930275108 C105C85923 JK67484 Y28522548 Y217997564 13GG492810 FIN

Donc voici ce que j'ai fait

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class TransTab {

    static String[] codeIdItemTab;
    static int[] qItemTab;
    static double[] prixItemTab;
    static int[] codeTaxTab;
   
    static void remplirTab(String nomFichier, int nombreTrans)throws FileNotFoundException{
        Scanner lectureFichier = new Scanner (new File(nomFichier));
        codeIdItemTab=new String[nombreTrans];
        qItemTab=new int[nombreTrans];
        prixItemTab=new double[nombreTrans];
        codeTaxTab= new int[nombreTrans];
        for (int i=0; i< nombreTrans && lectureFichier.hasNext(); i++){
            codeIdItemTab[i]=lectureFichier.next();
            qItemTab[i]=lectureFichier.nextInt();
            prixItemTab[i]=lectureFichier.nextDouble();
            codeTaxTab[i]= lectureFichier.nextInt();
        }
    }
      
    public static int[] selectQMinQmax(int qMin, int qMax, double prixSeuil){
        int[] tab2;
        tab2= new int [qItemTab.length];
        for (int i=0; i<qItemTab.length; i++){
            if (qItemTab[i] >=qMin && qItemTab[i]<=qMax && prixItemTab[i]>=prixSeuil){
                for (i=0; i<tab2.length; i++){
                    tab2[i]=qItemTab[i];
                }
                tab2[tab2.length+1] = -1;
        }
       }
       return tab2;
    }
    public static String[] listeItemIdCodeSansRedondance(){
        String[] tab1;
        tab1= new String[codeIdItemTab.length];
        for (int i=0; i<tab1.length; i++){
            if (codeIdItemTab[i].compareTo(codeIdItemTab[i++]) == 0)
            tab1[i]=codeIdItemTab[i];
        }
        tab1[tab1.length+1]= "FIN";
        return tab1;
    }
}

Mes deux problèmes; 1- je n'arrive pas a donner le numéro de la case 2- et j'arrive toujours out of bounds dans mes tableaux

Un énorme merci de votre aide

3 réponses

lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
5 déc. 2008 à 20:23
Petite question ... pourquoi n'utilise pas une ArrayList<String> ?? cela simplifirai la gestion de ton tableau. Et tu pourrais le parcourir avec un itérateur simplifié :

ArrayList<String> list = new ArrayList<String>;
for(String s : list)
{
sysout(s); //affiche le string
}

Je pense qu'avec çà tu évitera de sortir de ton tableau déjà

Bon courage

Lafolle
0
antara3d Messages postés 6 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 25 février 2009
5 déc. 2008 à 20:40
Maintenant mon selectQMinQmax fonctionne avec cela

public static int[] selectQMinQmax(int qMin, int qMax, double prixSeuil){
        int[] tab1;
        tab1= new int [qItemTab.length];
        int z=0;
        for (int i=0; i<qItemTab.length && i < prixItemTab.length; i++){
            if (qItemTab[i] >=qMin && qItemTab[i]<=qMax && prixItemTab[i]>=prixSeuil){
            tab1[z]=i;
            z++;
        }
        tab1[z+1] = -1;
       }
       return tab1;
    }

Mais mon listeItemIdCodeSansRedondance ne fonctionne toujours pas. Dans le test il me donne NullPointerException: null

public static String[] listeItemIdCodeSansRedondance(){
        String[] tab2;
        tab2= new String[codeIdItemTab.length];
        int w=0;
        for (int i=0; i<codeIdItemTab.length; i++){
            if (codeIdItemTab[i].compareTo(codeIdItemTab[i++] <0))
            tab2[i]=codeIdItemTab[i];
            w++;
        }
        tab2[w+1]= "FIN";
        return tab2;
    }
}

Encore Merci de bien vouloir m'aider
0
antara3d Messages postés 6 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 25 février 2009
6 déc. 2008 à 13:59
J'ai réglé mon problème

Merci de votre aide

Pour les curieux voici la solution

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class TransTab {

    static String[] codeIdItemTab;
    static int[] qItemTab;
    static double[] prixItemTab;
    static int[] codeTaxTab;
   
    static void remplirTab(String nomFichier, int nombreTrans)throws FileNotFoundException{
        Scanner lectureFichier = new Scanner (new File(nomFichier));
        codeIdItemTab=new String[nombreTrans];
        qItemTab=new int[nombreTrans];
        prixItemTab=new double[nombreTrans];
        codeTaxTab= new int[nombreTrans];
        for (int i=0; i< nombreTrans && lectureFichier.hasNext(); i++){
            codeIdItemTab[i]=lectureFichier.next();
            qItemTab[i]=lectureFichier.nextInt();
            prixItemTab[i]=lectureFichier.nextDouble();
            codeTaxTab[i]= lectureFichier.nextInt();
        }
    }
      
    public static int[] selectQMinQmax(int qMin, int qMax, double prixSeuil){
        int[] tab1;
        tab1= new int [qItemTab.length];//Déclaration d'un tableau
        int z=0;//Variable qui me sert de compteur
        for (int i=0; i<qItemTab.length && i < prixItemTab.length; i++){//Ouverture boucle for
            if (qItemTab[i] >=qMin && qItemTab[i]<=qMax && prixItemTab[i]>=prixSeuil){//Ouverture du if
            tab1[z]=i;//La case Z correspond au numéro de la case i du test approuvé
            z++;
        }//Fermeture du if
        tab1[z+1] = -1;//Ajout de -1 à la fin de la liste pour marquer la fin de celle-ci
       }//Fermeture du for
       return tab1;//retourne le tableau 1
    }// Fin de la méthode selectQMinQmax
   
    public static String[] listeItemIdCodeSansRedondance(){
        String[] tab2;
        tab2= new String[codeIdItemTab.length];//Déclaration d'un tableau
        int w=0;//Variable qui me sert de compteur
        for (int i=0; i<codeIdItemTab.length; i++){//ouverture boucle for #1
            boolean exam = false;// examen boolean initialisé a false
            for (int s=0;s<w;s++){//ouverture boucle for #2
                if (codeIdItemTab[i].compareTo(tab2[s])==0){//Ouverture du if #1
                    exam=true;// Si le if est retourne true cela veut dire qu'il est redondant il sera mis de côté
            }//Fermeture du if #1
        }//Fermeture de la boucle for #2
            if (exam==false){//Si exam correspond a faux, donc il n'est pas redondant
            tab2[w]=codeIdItemTab[i];//Le contenu de la case non redondante sera stocké dans le tab2
            w++;//Compteur
        }//Fermeture du if #2
    }//Fermeture de la boucle for #1
        tab2[w]= "FIN";//Ajout de "FIN" à la fin de la liste pour marquer la fin de celle-ci
        return tab2;//retourne le tableau 2
    }// Fin de la méthode listeItemIdCodeSansRedondance
}// Fin de la classe TransTab
0
Rejoignez-nous