System.in.read

Martin -  
 danimo -
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

  1. 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
  2. danimo
     
    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