Les Allergies
Alimentaires
Posez votre question Signaler

Java débutant: problèmes avec les boucles [Résolu]

Moody - Dernière réponse le 15 nov. 2011 à 19:29
Bonjour,
J'ai un exercice qui consiste à créer un programme qui lit un entier n, puis qui lit n lignes, et qui affiche la ligne la
plus longue. Par exemple :
$ java LigneLaPlusLongue
Combien de lignes ? 5
Ligne 1 ? Ceci
Ligne 2 ? est
Ligne 3 ? un
Ligne 4 ? essai
Ligne 5 ? ...
Ligne la plus longue : essai
Le problème c'est que avec ce que j'ai fait, le programme passe directement de "Ligne 1?" à "Ligne 2?" sans me laisser taper.
Voilà mon programme:
import java.util.Scanner;

class ligne{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int n; double a; double m; String lm; String l;
    System.out.println("Combien de lignes ?");
    n = sc.nextInt();
    while (n <= 0){
      System.out.println("Entrez un entier positif");
      n = sc.nextInt();
    }
    System.out.println("Ligne 1 ?");
    lm = sc.nextLine();
    m = lm.length();
    for (int i = 2; i<=n; i++){
      System.out.println("Ligne " + i + " ?");
      l = sc.nextLine();
      a = l.length();
      if (a >= m){
	m = a;
	lm = l;
      }else{
	m = m;
	lm = lm;
      }
    }
    System.out.println("Ligne la plus longue: " + lm);
  }
}

Voilà ce que ça donne à l'execution:
Combien de lignes ?
5
Ligne 1 ?
Ligne 2 ?
est
Ligne 3 ?
un
Ligne 4 ?
essai
Ligne 5 ?
...
Ligne la plus longue: essai
Et si j'indique 1 ligne il me met directement
Combien de lignes ?
1
Ligne 1 ?
Ligne la plus longue:
Que faut il changer pour qu'il me laisse entrer la 1ère ligne?


Merci.
Lire la suite 

Java débutant: problèmes avec les boucles »

4 réponses
Réponse
+0
moins plus
C'est le nextInt qui pose problème...
À chaque fois que tu tapes un entier au clavier, tu termines la saisie en appuyant sur la touche entrée, cela a pour effet de rajouter un \n à la fin de la chaîne de caractères.
Lorsque tu fais un nextInt, tu récupères les chiffres mais pas le \n, il reste "en attente" et il n'est récupéré qu'avec un nextLine. C'est pour ça que tes nextLine ne marchent pas, c'est parce qu'ils sont décalés, chacun récupérant les \n des nextInt précédents.
Il faut donc penser à rajouter un nextLine "pour du beurre" après chaque nextInt.
Il en va de même pour nextLong, nextFloat, nextDouble etc...

Je n'ai pas vraiment regardé ton code, il y a peut-être d'autres erreurs. Mais corrige déjà ça pour voir si ça te permet d'avancer dans la réalisation de ton programme ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Merci de ta réponse.
Je n'ai pas compris pourquoi mais juste en rajoutant un second lm = sc.nextLine(); sous le premier, ça a fonctionné. Sais tu pourquoi?
KX- 15 nov. 2011 à 00:10
Si tu doubles le nextLine, le premier va prendre le \n comme je l'ai expliqué, et le deuxième prendre la bonne valeur. Par contre ça ne marchera plus si tu donnes n négatif, car tu rentres dans ta boucle while, et tu fais un deuxième nextInt qu'il te faudra également compenser....
Moody - 15 nov. 2011 à 19:29
C'est bon j'ai compris.
Merci de m'avoir aidé.
Ajouter un commentaire
Ce document intitulé « Java débutant: problèmes avec les boucles » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?