System.in.read

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

  • Votes
  • Date
  • Date décroissante
  1. /*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();
    }
    }
    }
    }
    1. 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