Condition avec un string dans une boucle while

Fermé
linquisiteur - Modifié par linquisiteur le 20/08/2013 à 19:14
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 21 août 2013 à 13:43
Bonjour, j'essaye de mettre une condition de fin avec un String dans une boucle malheureusement tout mes effort on été vain .. Il s'agit surement d'un problème très simpliste mais j'ai pas trouver grand chose sur google (sauf pour des char)

merci d'avance!

Scanner sc = new Scanner(System.in);
  String nom; int score;
  System.out.println("Entrez les scores des participantes. Terminez l'enregistrement avec fin");
  System.out.println("Entrez le nom du candidat");
  nom = sc.nextLine();
  System.out.println("Entrez son score");
  score = sc.nextInt();
  
  while(!nom.equals("fin") )
  { 
  ch.ajouterScore (nom, score);
  System.out.println("Entrez le nom du candidat");
  nom = sc.nextLine();
  sc.nextLine();
  if(!nom.equals("fin"))System.out.println("Entrez son score");
  score = sc.nextInt();
  }
  
  for(int cpt=0;cpt<10;cpt++) ch.toString();



P.S j'aimerai lire un toString de tout les participants du concours mais en passant par la classe concours et non participante mais comment les appelés?

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 août 2013 à 19:19
Il faut faire attention quand on mélange les nextInt et les nextLine sur System.in en effet nextInt ne prends pas toute la ligne, or on a appuyé sur Entrée, donc le saut de ligne reste coincé dans le flux. Il faut l'évacuer avec un nextLine sinon c'est le prochain nextLine qui le fera (du coup on ne pourra pas lire le "fin")

Remarque : plutôt que de répéter les instructions avant et pendant la boucle while, tu peux faire une boucle do while.

System.out.println("Entrez les scores des participantes. Terminez l'enregistrement avec fin");

do
{
    System.out.println("Entrez le nom du candidat");
    nom = sc.nextLine();

    System.out.println("Entrez son score");
    score = sc.nextInt();
    sc.nextLine(); // évacue la fin de ligne

    ch.ajouterScore(nom, score);
}
while(!nom.equals("fin"));
0
linquisiteur
20 août 2013 à 19:28
Merci beaucoup , oui je n'ai plus d'erreur dans cette partie du code mais par contre comment puis-je lire mes toString?
0
linquisiteur
21 août 2013 à 09:48
Re bonjour :)
Désoler j'ai encore un problème mon ch.toString() ne fonctionne pas pourtant je ne vois pas le problème...

Je poste tout par précaution mais le plus important est le main et la dernière procédure de Concour. Pourquoi lorsque je l'appelle je ne peux pas la lire (rien ne s'affiche)

J'aimerai vérifier toute les fonctions que j'ai coder... Mais sans pouvoir lire les données c'est problématique ^^'

Merci d'avance (P.S pas besoin de lire tout j'ai poster la totalité du code si l'erreur vient de plus loin..")

l'output:
Concour complet !
Entrez les scores des participantes. Terminez l'enregistrement avec fin
Entrez le nom du candidat


le main
import java.util.Scanner;


public class Main {
	
	public static void main(String[] args) {
		
		Concour ch = new Concour(10);
		ch.Inscrire( new Participante("Maya","maya familly"));
		ch.Inscrire( new Participante("Nadine","maya familly"));
		ch.Inscrire( new Participante("Evi","maya familly"));
		ch.Inscrire( new Participante("Lulu","maya familly"));
		ch.Inscrire( new Participante("Laila","maya familly"));
		ch.Inscrire( new Participante("monsieurX","arco"));
		ch.Inscrire( new Participante("monsieury","arco"));
		ch.Inscrire( new Participante("monsieurZ","arco"));
		ch.Inscrire( new Participante("Pascal"));
		ch.Inscrire( new Participante("Jean"));
		 ch.toString();
		Scanner sc = new Scanner(System.in);
		String nom; int score;
		System.out.println("Entrez les scores des participantes. Terminez l'enregistrement avec fin");
		
		do
		{
		    System.out.println("Entrez le nom du candidat");
		    nom = sc.nextLine();

		    System.out.println("Entrez son score");
		    score = sc.nextInt();
		    sc.nextLine(); // évacue la fin de ligne

		    ch.ajouterScore(nom, score);
		}
		while(!nom.equals("fin"));
		
		 ch.toString();
		 
		 //ch.classementFinal();
	}

}



public class Participante{

	private String nom;
	private String ecole;
	private int scoreAsym;
	private int scorePoutre;
	private int nbJugeAsym;
	private int nbJugePoutre;
	
	
	//constructeur
	
	public Participante(String nom){
		this.nom = nom;
		this.ecole = "aucune";
		this.scorePoutre = 10;  // a retirer
		}
	
	public Participante(String nom, String ecole){
		this.nom = nom;
		this.ecole = ecole;
		this.scorePoutre = 10;  // a retirer
		}
	
	public void noteAsym(int score){
		this.scoreAsym += score;
		this.nbJugeAsym++;
	}
	
	public void notePoutre(int score){
		this.scorePoutre += score;
		this.nbJugePoutre++;
	}
	
	public String getNom()
	{
		return nom;
	}
	
	public String getEcole()
	{
		return ecole;
	}
	
	public float getMoyenneAsym()
	{
		return(scoreAsym/nbJugeAsym)*10;
	}
	
	public float getAsym()
	{
		return scoreAsym;
	}

	
	public float getMoyennePoutre()
	{
		return (scorePoutre/nbJugePoutre)*10;
	}
	
	public float getMoyenneTotal()
	{
		return(getMoyenneAsym()/2 +getMoyennePoutre()/2 );
	}
	
	public String toString()
	{
		return "Participante: "+nom+" Ecole: "+ecole+" Score moyen epreuve asymetrique: "+getMoyenneAsym()+" Score moyen epreuve Poutre "+getMoyennePoutre()+" Moyenne globale: "+getMoyenneTotal() ;
	}
	
	//renvoie 1 si this est le gagnant sinon 0
	public int comparerMoyenne(Participante p)
	{
		int winner;
		if(this.getMoyenneTotal() > p.getMoyenneTotal()) winner=1;
		else if (this.getMoyenneTotal() > p.getMoyenneTotal()) winner=0;
		else
		{
			if(nom.length() > p.nom.length()) winner=1;
			else winner=0;
		}
		
		return winner;
	}
	
	Concour ch;
	public void cloner()
	{
		ch.Inscrire( new Participante(this.nom, this.ecole));
	}
	
	public void ecole(String ecole)
	{
		if(this.ecole == ecole) System.out.println("La participante provient de cette école");
		else System.out.println("La participante provient d'une autre école. A savoir: "+this.ecole);
	}
}



public class Concour {
	
	private int MaxInscrit;
	private int nbInscrit;
	private Participante[] tab;
	
	public Concour(int nb)
	{
		this.MaxInscrit=nb;	
		this.nbInscrit=0;
		tab = new Participante[MaxInscrit];
	}
	
	public void Inscrire(Participante p)
	{
		tab[nbInscrit] = p;
		nbInscrit++;
	//	Trie(p.getNom());
		Complet();
	}
	
	public void Inscrire(String nom)
	{
		tab[nbInscrit] = new Participante(nom);
		nbInscrit++;
	//	Trie(nom);
		Complet();
	}
	
	public void Inscrire(String nom, String ecole)
	{
		tab[nbInscrit] = new Participante(nom,ecole);
		nbInscrit++;
	//	Trie(nom);
		Complet();
	}
	
	private void Complet()
	{
		if(nbInscrit == MaxInscrit) System.out.println("Concour complet !");
	}
	
	/*private void Trie(String name)
	{
		int cpt = 0;
		while (cpt<nbInscrit)
		{
			if(tab[cpt].getNom().compareTo(name))
			else
			{
				temp = new Participante(tab[cpt].getNom());
				tab[cpt].getNom() = name;
				name = tab[cpt].getNom();
				cpt++;
			}
		}
	}*/
	
	public void ajouterScore (String name, int nb)
	{
		int cpt = 0;  boolean ok = false;
		
		while (cpt < nbInscrit || ok == true)
		{
			if (tab[cpt].getNom() == name) {ok = true; tab[cpt].getAsym();}
			else cpt++;
		}
	}
		
	public void afficherEcole(String school)
	{
		int cpt=0;
		while (cpt < nbInscrit )
		{
			if (tab[cpt].getEcole() == school) System.out.println(tab[cpt].getNom()+"\n");
			else cpt++;
		}
	}
	
	public void classementAsym()
	{
		int cpt=0;
		while (cpt < nbInscrit )
		{
			 System.out.println(tab[cpt].getNom()+": "+tab[cpt].getMoyenneAsym()+"\n");
			 cpt++;
		}
	}
	
	public void classementFinal()
	{
		int cpt=0;
		while (cpt < nbInscrit )
		{
			 System.out.println(tab[cpt].toString()+"\n");
		}
	}
	
	public String toString()
	{
		return "Le concour possède "+nbInscrit+" sur un total de: "+MaxInscrit;
	}

}


0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
Modifié par kij_82 le 21/08/2013 à 13:44
Bonjour,

Ca ne fonctionne pas car ta fonction 'toString()' retourne une String, mais tu ne l'affiche tout simplement pas via un System.out.println(..) au retour de la fonction (dans ton main donc)

Globalement, essaie de lire des articles sur les conventions de nommage, etc. Mettre des majuscules comme première lettre de variable est à éviter. Idem, si tu accèdes à des variables de classes à l'intérieur de tes méthodes de classes, si tu ne passe pas par des accesseurs (getter / setter), précéde par this.nomDeMaVariable.
C'est tout de suite plus lisible pour quelqun ne connaissant pas ton code, ou ta manière de coder.


~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
0