STID 1ere année, need help programme tableau

Résolu/Fermé
RadinMan Messages postés 7 Date d'inscription dimanche 13 décembre 2015 Statut Membre Dernière intervention 13 décembre 2015 - Modifié par RadinMan le 13/12/2015 à 20:09
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 - 14 déc. 2015 à 00:42
Bonjour tout le monde,
Comme dis dans le titre, je suis en 1ere STID et on a un prof de JAVA assez.. Pitoyable pour être gentil, elle nous explique rien et pour elle c'est "normal".

Bref j'viens ici dans l'espoir qu'on puisse m'aider pour un devoir qu'elle nous a donné pour demain (Oui oui je m'y prends tard mais bon..)

Bref je vous explique rapidement le but par le biais du code que j'ai déjà commencé a faire :
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

import java.util.Scanner;

public class Vente {

static void Vente(int Vendeur[][],String Modèle[]) {
int Vente[] [] = new int [4] [3];
char Vendeurs [] = new char [4];
char Modèles [] = new char [3];
int Somme = 0;


for (int Colonne=0; Colonne<3; Colonne++) {
 for (int Ligne=0;Ligne<4;Ligne++) {
  Somme = Somme + Vendeur[Ligne][Colonne];
    }
 
 
System.out.println("Le modèle "+ Modèle[Colonne]+" à été vendu "+Somme);
Somme = 0;
}


 }

static void Prix(int Vendeur[][], String Nom_Vendeur[], String Modèle[]) {
int Prix[] = {5000,10000,15000};
int Total = 0;
for (int Colonne=0;Colonne<3;Colonne++){
 for(int Ligne=0;Ligne<4;Ligne++){
  Total = Total + Vendeur[Ligne][Colonne];
 }
System.out.println("Le chiffre d'affaire pour le vendeur "+Nom_Vendeur[Colonne]+" est "+Total*Prix[Colonne]);
Total = 0; 
}

}

public static void main(String[] arg) {
int Vendeurs[][] = new int [4][3];
String Nom_Vendeurs[] = {"André","Justine","Marie","Pierre"};
String Modèle[] = {"Mercedes","Porsche","Twingo"};
Scanner sc = new Scanner(System.in);
for (int Ligne=0; Ligne<4; Ligne++){
 for (int Colonne=0;Colonne<3;Colonne++){
  System.out.println("Entrez une valeur pour "+Ligne+" "+Colonne);
  Vendeurs[Ligne][Colonne]=sc.nextInt();
 }
}
Vente(Vendeurs,Modèle);
Prix(Vendeurs, Nom_Vendeurs, Modèle);
}

static void Vendeurs() throws IOException {
 // TODO Auto-generated method stub
 
 BufferedReader Ve = new BufferedReader(new FileReader("C:/Users/Utilisateur/Desktop/Vendeur.txt"));
  String str = null;
  while((str = Ve.readLine()) != null){
      System.out.println(str);
  }
}


static void Voitures() throws IOException {
// TODO Auto-generated method stub

BufferedReader Ve = new BufferedReader(new FileReader("C:/Users/Utilisateur/Desktop/Voiture.txt"));
 String str = null;
 while((str = Ve.readLine()) != null){
     System.out.println(str);
 }
}



}



Dans le main, je suis censé créer en mémoire le tableau grâce à des fichiers textes (pour remplir les noms des vendeurs et les modèles de voiture (4 vendeurs et 3 modèles)) Or j'arrive absolument pas a lié les fichiers.txt pour que les lignes soient dans mon tableau.

Dans Vente et Prix, il va calculer combien de fois a été vendu une voiture et combien chaque vendeur à obtenu.

Et les 2 derniers servent à lire les fichiers textes, c'bien les seules où je pense pas à m'être trompé mais bon, sait on jamais..

En gros là où je bloque c'est :
Lier la lecture des fichiers textes au tableau.
Et réussir à rajouter le 4eme vendeur qui veut pas venir nous dire ses ventes.

La liaison du fichier .txt avec le programme est simplement là pour modifier rapidement les noms des modèles et des vendeurs pour ne pas être obligé de modifier l'algorithme lui même (pour les néophytes qui ne savent pas se servir de java dixit ma prof.)

Pour ce qui est du fichier texte et des noms, j'avais eu l'idée de stocker les noms des vendeurs et des modèles dans des variables et ensuite simplement mettre les variables au bon endroit mais.. est ce possible?
Le mieux seraient de créer un tableau en fonction du nombre de ligne dans le fichier mais elle ne l'a pas demandé et j'suis bien trop nul en JAVA pour le moment pour entrer dans cette partie la!

En ce qui concerne les fichiers textes c'est simplement de la forme :

Fichier Vendeurs:

nom1
nom2
nom3
nom4

Fichier Voitures:

modèle1
modèle2
modèle3

En espérant que vous pourrez m'aider sur les points sombres du programme, merci d'avance.

Cordialement,

4 réponses

faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
13 déc. 2015 à 20:11
Ton code marche, juste que le chemin vers les fichiers sur windows s'écrit
C:\\Users\\Faseldi\\Desktop\\vendeurs.txt


avec un anti-slash, et non un slash
0
RadinMan Messages postés 7 Date d'inscription dimanche 13 décembre 2015 Statut Membre Dernière intervention 13 décembre 2015
Modifié par RadinMan le 13/12/2015 à 20:16
Ahah, oui je sais que le programme marche, mais la lecture des fichiers ne me sert à rien si j'arrive pas à m'en servir pour changer les données vendeurs/modèles du tableau.

String Nom_Vendeurs[] = {"André","Justine","Marie","Pierre"};
String Modèle[] = {"Mercedes","Porsche","Twingo"};

Il faudrait qu'ici à la place des noms, je puisse avoir la lecture des fichiers textes en faite.

Et réussir a faire apparaître le 4eme vendeur, mais la c'est simplement une erreur dans les boucles / création tableau je suppose, je dois juste savoir où.

Désolé si j'me suis mal exprimé juste avant!
0
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
13 déc. 2015 à 20:23
D'accord ! :p
Alors oublie les tableaux statiques

dans ton main (même si ça devrait être dans un constructeur, mais tant pis)
tu fais ArrayList<String> nom_vendeurs = vendeurs();
il faut l'import java.util.ArrayList;
ta méthode vendeurs :

static ArrayList<String> vendeurs() throws IOException {
ArrayList<String> vendeurs = new ArrayList<>();
BufferedReader ve = new BufferedReader(new FileReader("C:/Users/Utilisateur/Desktop/Vendeur.txt"));
String str = null;
while((str = ve.readLine()) != null){
System.out.println(str);
vendeurs.add(str);
}
return vendeurs;
}



Juste, question de lisibilité du code pour les développeurs, et de norme Java, écris les noms des méthodes et attributs avec la premiere lettre en miniscule, toujours, sauf les attributs statiques, et les noms des classes avec une premiere lettre en majuscule.
0
RadinMan Messages postés 7 Date d'inscription dimanche 13 décembre 2015 Statut Membre Dernière intervention 13 décembre 2015
13 déc. 2015 à 20:52
Même si on l'a pas encore vu, je comprend le principe même si "constructeur" j'sais absolument pas c'est quoi.

Mais du coup pour :
String Nom_Vendeurs[] = {"André","Justine","Marie","Pierre"};
String Modèle[] = {"Mercedes","Porsche","Twingo"};

Ca devient juste :
vendeurs();
voitures();

Ou je dois rajouter une ligne pour dire que le tableau doit puiser la dedans?

System.out.println("Le chiffre d'affaire pour le vendeur "+Nom_Vendeur[Colonne]+" est "+Total*Prix[Colonne]);

Ca fonctionne comment pour renseigner le Nom_Vendeur[Colonne] La?
0
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
13 déc. 2015 à 21:24
and tu écris une classe
public classe Patate{
public Patate(){
}
}

le constructeur sera Patate(), il porte toujours le nom de la classe, et tu peux en mettre plusieurs, de profils différents.

Je ne vois pas trop ce que tu demandes, mais je vais essayer de répondre quand même.
Pour afficher ton tableau, tu peux faire une méthode statique (hors du main)

public static void affiche(String[] tabVendeurs, String[] tabVoitures){
for(int i = 0; i < tabVendeurs;i++){
System.out.println(tabVendeurs[i]+" "+tabVoitures[i]);
}
}


et l'appeler où tu veux comme ça afficher(Nom_Vendeurs, Modèle);
pareil, pour la lisibilité, quand tu fais un tableau statique, écris le [] après le type (exemple : String[] mon_tab), voilà :p
0
RadinMan Messages postés 7 Date d'inscription dimanche 13 décembre 2015 Statut Membre Dernière intervention 13 décembre 2015
Modifié par RadinMan le 13/12/2015 à 22:12
Fiuh, plus les explications passent et plus tu me perds, heureusement que j'aime bien la complexité de l'informatique sinon ça ferait un moment que j'serais parti !

En faite pour faire simple, se que je demande c'est qu'au début mon tableau avec les noms des vendeurs et des modèles etaient définit directement dans la racine du programme :
String Nom_Vendeurs[] = {"André","Justine","Marie","Pierre"};
String Modèle[] = {"Mercedes","Porsche","Twingo"};
de cette façon là.

Du coup quand j'voulais les appeler j'avais juste a faire (nom_vendeurs,modèle), mais vu qu'en les mettant dans une liste d'objet ils ne portent plus aucun lien avec les colonnes et lignes, comment je fais pour réussir a refaire sortir le nom du modèle en fonction de la ligne des ventes?

Par ce qu'en faite j'obtiens ça au final :

Porche
Mercedes
Mégane
Le modèle [Porche, Mercedes, Mégane] à été vendu 4 fois
Paul
Jules
Benard
Marjorie
Le chiffre d'affaire pour le vendeur [Paul, Jules, Benard, Marjorie] est 20000

Si tu comprends pas encore, ça me dérange pas de faire des tableaux parci parlà par excel, j'suis de ceux qui s'arrête pas tant qu'ils ont pas compris (ou que je soule ceux qui m'explique..)

En tout cas, c'est gentil de prendre du temps pour m'aider! :)
0
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
13 déc. 2015 à 22:16
Je crois que tu te compliques trop la vie ! :p (et en info on aime pas ça)
L'astuce plutôt que de mmettre des lignes et des colonnes serait de mettre un HashMap
si tu sais pas ce que c'est, imagine le comme un dictionnaire, quand tu cherches un mot, il te renvoit la définition du mot, bah c'est exactement pareil, tu demandes par exemple map.get(mon_modele), il te donne ton modèle, et si il en a pas, il te donne null
Une HashMap, pour ton cas, avec deux entrées, je ferais comme ça

HashMap(String[] nom_vendeur_et_modele, int[] ventes) map = new HashMap<>();
quand tu ajoutes un vendeur et un modele, tu fais
String[] nom_ven_mod = {"popaul","fiat"};
int vente= 10: // par exemple
map.set(nom_vend_mot, vente);

et quand tu veux recupérer les ventes tu fais
String[] nom_ven_mod= {"popaul","fiat"};
int[] ventes = map.get(nom_ven_mod); // attention tu peux avoir null ici si ils n'existent pas


ici l'astuce et de dire que le mot dans le dictionnaire est un couple de valeurs, donc en java un tableau String[] toujours de taille deux en fait. Le mieux serait de faire une classe Couple, mais je ne pense pas que tu aies vu ça.

Bref maintenant, si tu as compris, il suffit de creer un tableau String[] tab = {nom_vendeur, nom_modèle};
et de dire à ta map : map.get(tab);
Si elle a ton tableau dans sa mémoire, elle te le renvoit, sinon elle te renvoit null


Je tiens à m'excuser pour mon manque de compréhension, je fais une application Android et aide d'autres internautes en même temps que toi (et je mangais... un vrai geek)

Bref désolé x)
0
RadinMan Messages postés 7 Date d'inscription dimanche 13 décembre 2015 Statut Membre Dernière intervention 13 décembre 2015
13 déc. 2015 à 22:28
Je comprend l'idée de ton explication tqt, mais le problème c'est qu'on a quasiment rien vu en 3mois de cours.
Les boucles, les sous programmes, les tableaux (en 2min) et elle a parlé 30sc de la lecture d'un fichier.
J'aime pas me compliquer la vie aussi, quand j'peux faire simple, je le fais, mais actuellement je possède absolument pas le savoir faire pour me faciliter la vie..
Et on a pas vu ton ptit mapping, si je l'utilise ça va partir en cacahuète vu la bétise de ma prof.. Du coup j'vais rester sur le Array, doit y avoir moyen d'en faire apparaitre que un si c'pas le cas, elle se débrouillera, j'serais surement le plus avancé vu ma promo de branque.

Me manque plus qu'à savoir où est mon erreur dans la disparition du 4eme nom et pourquoi le calcule des ventes est faux.
Ca me calcule la premiere ligne x la premiere colonne du prix.

" ...... " André, Pierre, Paul, Jacques
Twingo 1 1 1 1 = prix T* 1 + prix T *1 ......
Mercedes 1 1 1 1 = prix M* 1 + prix M *1 ......
Porsche 1 1 1 1 = prix P* 1 + prix P*1 ......

Au lieu du Prix T*1 + Prix M*1 + Prix P*1

(j'te demande pas de le faire, j'dis juste où est le probleme dans le doute où t'as déjà repéré l'erreur! :pppp)

Et t'excuse absolument pas pour ça, j'arrive à te comprendre, et tu réponds assez vite pour tout ce que tu fais donc tout va bien!
0
faseldi Messages postés 279 Date d'inscription dimanche 9 novembre 2014 Statut Membre Dernière intervention 3 janvier 2017 20
13 déc. 2015 à 22:37
si ça fait une erreur de ce style, je pense que dans le calcul tu dois te tromper entre ligne et colonne, dans ta boucle pour le calcul, fais des System.out.println(vals) des valeurs pour voir si ce sont les bonnes (je sais pas si tu fais ça d'habitude pour debug mais c'est très utile! :p )
0