System.in.read

Martin -  
 Utilisateur anonyme -
Bonjour,

Je suis débutant avec JAVA.

Je sais qu'une question similaire a été demandée (j'ai fait plusieurs essais) et cela ne fonctionne pas (System.in.read).

Voici mon programme:

/*tp2p1b : afficher demi pyramide avec hauteur choisie. */
public class tp2p1b {
public static void main (String args[])
{
int a;
System.out.print("a= ");
a= System.in.read();
{
for (int i=1;i<=a;i++)
{
for (int j=1;j<=i;j++) System.out.print("*");System.out.println();
}
}
}
}

J'ai toujours des erreurs avec system.in.read ou IOE.

Merci de votre aide.

Martin

2 réponses

Martin
 
/*tp2p1b : afficher demi pyramide avec hauteur choisie. */
import java.util.Scanner;

public class tp2p1b {

public static void main(String[] args){
int a;
Scanner scan=new Scanner(System.in);
System.out.print("a= ");
a = scan.nextInt();
{
for (int i=1;i<=a;i++)
{
for (int j=1;j<=i;j++) System.out.print("*");System.out.println();
}
}
}
}
0
Utilisateur anonyme
 
Salut,

Pour la 1ère version (System.in), javac indique :

"unreported exception java.io.IOException; must be caught or declared to be thrown."

Il suffirait d'ajouter un bloc try /catch pour pouvoir tester:
public class tp2p1b { 
      public static void main (String args[]) 
      { 
         int a; 
         System.out.print("a= ");
         
         try
         {
         a= System.in.read(); 
         { 
            for (int i=1;i<=a;i++) 
            { 
               for (int j=1;j<=i;j++) System.out.print("*");System.out.println(); 
            } 
         }
         }
            catch (Exception e)
            {
               e.printStackTrace();
            }
      }
   }


Mais on se rendra compte que le résultat espéré n'est pas celui attendu concernant la hauteur:

a= System.in.read(); tout d'abord n'accepte qu'un caractère mais ce n'est pas le caractère entré qu'on obtient dans a mais sa valeur décimale.

Par exemple pour o (zero), on obtient 48, pour 1, 49,... pour 9, 57 et ce sont ces valeurs qui donneront la hauteur.
On pourait soustraire 48 à a mais il n'y a pas beaucoup de cas de hauteur sachant que 0 et 1 sont à éliminer il rest 3 à 9.

Ce qui fait que ton idée d'utiliser Scanner est la bonne.
En plus la 2ème version compile et s'exécute.

Encore un "MAIS":
Quelle est la version java que tu utilises ?

Si tu as des problèmes, c'est peut-être que ta version est inférieure à 1.5.

Si c'est le cas, tu devras te tourner vers la solution

// Definir un flux de caracteres d'entrée: fluxE
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader fluxE = new BufferedReader(isr);
         // L'intro termine par <INTRO>
            String entree = fluxE.readLine();
int a = Integer.parseInt(entree());
         }


Cordialement,

Dan
0