Problème avec char

Problème avec char - Java - Programmation

Marsh Posté le 01-11-2022 à 19:38:01    

Bonjour j'ai hésité à poster mais je ne trouve pas de solution à mon souci. Je suis un débutant en Java. J'ai un souci avec char choix. Comme on ne peut pas utiliser choix = clavier.nextChar je l'ai remplacé par choix =clavier.nextLine().charAt(). Mais ça ne marche pas.
package boucles;
 
import java.util.Scanner;
 
public class fairedowhile {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double x;
        char choix ='O';
           
         
        Scanner clavier = new Scanner(System.in);
         
         
 
        do {
            System.out.println("entrer un montant : " );
 
            x = clavier.nextDouble();
 
            if (x > 200)
                x = 0.95 * x;
            System.out.printf("le prix avec remise est %.2f euros ", x);
 
            System.out.println();
            System.out.print("voulez vous entrer un nouveau montant: O/N?" );
             
            choix = clavier.nextLine().charAt(0);
     
             
   
        } while (choix == 'O');
         
        clavier.close();
 
    }
 
}
 
Je vous remercie pour votre aide.


Message édité par kreiss_ le 02-11-2022 à 15:07:46
Reply

Marsh Posté le 01-11-2022 à 19:38:01   

Reply

Marsh Posté le 02-11-2022 à 15:08:57    

Code :
  1. entrer un montant :
  2. 500
  3. le prix avec remise est 475,00 euros
  4. voulez vous entrer un nouveau montant: O/N?Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  5. at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
  6. at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
  7. at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
  8. at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
  9. at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
  10. at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
  11. at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
  12. at java.base/java.lang.String.checkIndex(String.java:4570)
  13. at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)
  14. at java.base/java.lang.String.charAt(String.java:1527)
  15. at boucles.fairedowhile.main(fairedowhile.java:29)

ça m'affiche une erreur en ligne 29.
merci

Reply

Marsh Posté le 04-11-2022 à 10:01:25    

Utilise:
1. scanner.next() pour récupérer la prochaine ligne, et compare des String directement.
2. Un try-with-resources pour ne pas avoir à appeler scanner.close() toi même
 

Code :
  1. import java.util.Scanner;
  2.  
  3. import static java.lang.System.out;
  4.  
  5. public class FaireDoWhile {
  6.    public static void main(String[] args) {
  7.        try (Scanner clavier = new Scanner(System.in)) {
  8.            do {
  9.                out.println("Entrer un montant : " );
  10.  
  11.                double x = clavier.nextDouble();
  12.  
  13.                if (x > 200)
  14.                    x = 0.95 * x;
  15.                out.printf("Le prix avec remise est %.2f euros\n", x);
  16.  
  17.                out.print("Voulez vous entrer un nouveau montant: O/N? " );
  18.  
  19.            } while ("O".equals(clavier.next()));
  20.        }
  21.    }
  22. }



---------------
Always wear a camera!
Reply

Marsh Posté le 04-11-2022 à 23:22:40    

Flaie a écrit :

Utilise:
1. scanner.next() pour récupérer la prochaine ligne, et compare des String directement.
2. Un try-with-resources pour ne pas avoir à appeler scanner.close() toi même
 

Code :
  1. import java.util.Scanner;
  2.  
  3. import static java.lang.System.out;
  4.  
  5. public class FaireDoWhile {
  6.    public static void main(String[] args) {
  7.        try (Scanner clavier = new Scanner(System.in)) {
  8.            do {
  9.                out.println("Entrer un montant : " );
  10.  
  11.                double x = clavier.nextDouble();
  12.  
  13.                if (x > 200)
  14.                    x = 0.95 * x;
  15.                out.printf("Le prix avec remise est %.2f euros\n", x);
  16.  
  17.                out.print("Voulez vous entrer un nouveau montant: O/N? " );
  18.  
  19.            } while ("O".equals(clavier.next()));
  20.        }
  21.    }
  22. }



je te remercie.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed