Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de buffer de flux lecture

    12 février 2012 à 23:01:07

    Bonjour,
    Je débute le java en cour et j'ai décider d'avancer un peu moi même pendant les vacances(oui moi je suis en vacance).
    J'ai donc vite fait parcourut la première partie que j'avait déjà vu en cour avec quelque nuance.

    J'ai donc éssayer de faire le convertisseur degré Celsius et Fahrenheit.

    Tout d'abord mon code(première fois que j'utilise la balise java^^):
    import java.io.*;
    
    class degre_flo
    {
    	
    	private double debut, fin, pa;
    	public void set_pa(double var)
    	{
    		
    		pa = var;
    		
    	}
    	public void set_fin(double var)
    	{
    		
    		fin = var;
    		
    	}
    	public void set_debut(double var)
    	{
    		
    		debut = var;
    		
    	}
    	private double conversion(double degre)
    	{
    		
    		return (9.0/5.0)*degre+32;
    		
    	}
    	public boolean verif_pa()
    	{
    		
    		if(pa < (debut + fin) && fin > debut)
    			return true;
    		else
    			return false;
    		
    	}
    	private int taille(double var)
    	{
    		
    		if(var>10000 || var < 0.001)
    			return 5;
    		else if(var>1000 || var < 0.01)
    			return 4;
    		else if(var>100 || var < 0.1)
    			return 3;
    		else if(var>10)
    			return 2;
    		else return 1;
    		
    	}
    	public void afficher()
    	{
    		
    		double i = 0, j = 0;
    		String buf = "          ", str = "";
    		System.out.println("TABLE DE CONVERSION CELSIUS / FAHRENHEIT");
    	    System.out.println("---------------------------------------------");
    	    System.out.println("       Celsius      |       Fahrenheit       ");
    	    System.out.println("---------------------------------------------");
    	    
    	    for(i=debut;i<fin;i++)
    	    {
    	    	
    	    	str = "" + buf+i;
    	    	for(j=taille(i);j<10;j++)
    	    		str = str+" ";
    	    	str=str+"|"+buf+conversion(i);
    	    	for(j=taille(i);j<10;j++)
    	    		str = str+" ";
    	    	
    	    }
    		
    	}
    	
    	
    }
    
    
    public class demo
    {
    
    	
    	public static void main(String[] args) 
    	{
    		
    		BufferedReader entrer = new BufferedReader(new InputStreamReader(System.in));
    		
    		degre_flo convert = new degre_flo();
    		
    		do
    		{
    		
    			System.out.println("Veuiller entre la température du début:");
    			try
    			{
    				
    				convert.set_debut(Double.parseDouble(entrer.readLine()));
    			
    			}catch(Exception e){;}
    			
    			System.out.println("Veuiller entre la température de fin:");
    			try
    			{
    				
    				convert.set_fin(Double.parseDouble(entrer.readLine()));
    			
    			}catch(Exception e){;}
    			System.out.println("Veuiller entre la température du début:");
    			try
    			{
    				
    				convert.set_debut(Double.parseDouble(entrer.readLine()));
    			
    			}catch(Exception e){;}
    			
    			System.out.println("Veuiller entre le pa:");
    			try
    			{
    				
    				convert.set_fin(Double.parseDouble(entrer.readLine()));
    			
    			}catch(Exception e){;}
    		}while(convert.verif_pa());
    		
    		convert.afficher();
    
    	}
    
    }
    


    Donc mon problème est que je lit les 3 valeurs(debut, fin, pa) les un après les autres mais à chaque fois une des 3 instruction n'est pas lut, ayant déjà vus des problème similaire en C je suppose qu'il s'agit d'un problème de buffer non vide.

    Ma question est comment vider le buffer ?
    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2012 à 10:06:35

      Alors je ne pourrai pas te dire d'où vient l'erreur :p mais j'imagine qu'il doit y avoir un problème après ton premier readLine(). Tu vas prendre le contenu de la ligne, ensuite sans fermer le tampon tu vas réécrire dans la sortie standard et reprendre le contenu de la ligne...
      Enfin, j'imagine, quelqu'un apportera peut être la réponse :D


      Ce que je te conseille (et qui marche) est de créer une méthode qui se charge elle même des entrées clavier (ou directement une classe avec les méthodes readInt, readDouble, readString, readChar... comme ça quand tu en auras encore besoin tu l'auras directement). Voici la méthode :

      // 
          public double readDouble()
          {
              Double tmp = null;
              
              BufferedReader flot = new BufferedReader( new InputStreamReader( System.in ) );
              
              while( tmp == null )
              {
                  try
                  {
                      tmp = new Double( flot.readLine() );
                  }
                  catch( NumberFormatException e )
                  {
                      System.out.println( "Entrer un reel !" );
                  }
                  catch( IOException e )
                  { }
              }
              
              return tmp.doubleValue();
          }
      


      La différence que tu peux noter avec ta manière de faire (qui est identique) est que je recrée à chaque fois le flot de lecture.

      Une remarque au passage (c'est du détail je te l'accorde) :
      - Pour les noms de classes en Java (mais c'est de même pour les structures en C, la première lettre en majuscule, si c'est un nom composé comme une table de jeu, la classe portera le nom TableDeJeu
      - Les méthodes, même principe sauf que la première lettre et en minuscule
      • Partager sur Facebook
      • Partager sur Twitter

      Problème de buffer de flux lecture

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown