Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java's cool] Conversion binaire vers décimal

    22 septembre 2017 à 15:39:00

    Bonjour à tous,

    J'essaie de faire un programme permettant de convertir un nombre binaire en décimal. Mon programme fonctionne mais le problème c'est qu'il fonctionne aussi avec des nombres non binaires et des nombres négatifs (ça renvoie 0 pour ceux là). 

    Comment puis-je faire pour qu'on ne puisse rentrer que des nombres binaires?

    Merci d'avance :)

    void main(){

    // Déclaration des variables :

    int NB = 0; // Nombre binaire

    int ND = 0; // Nombre décimal

    int nd = 0; 

    int r = 0;  // Reste

    int k = 0;

    NB = readInteger ("Entrer un nombre binaire");

    // Boucle tant que :

    while (NB > 0){

    r = NB % 10; // Reste de la division de NB par 10

    nd = r * (int)pow(2,k); 

    k = k + 1;

    NB = (NB - r) / 10;

    ND = ND + nd; // ND = addition des nd

    }

    // Affichage de la solution :

    println ("Le nombre décimal correspondant est :" + ND);

    }

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2017 à 17:41:06

      Bonjour,

      Premiere chose : pour inserer du code sur le forum utilise la balise code.

      Deuxieme chose, pourquoi ne pas utiliser la fonction toute faites de integer qui permet de transformer un String en entier a partir de n'importe quelle base ? Ici 2 pour le binaire :

      String binary = "1101001";
      Integer i = Integer.parseInt(binary,2);
      System.out.println("Integer value: "+i);

      Si toutefois tu voulais ecrire toi meme un code robuste pouvant transcrire n'importe quel nombre binaire positif en entier positif sans permettre d'erreur de saisie (Regle n*1: Never Trust User Input), voici la fonction qui repond a tout tes besoins :

      public class Main {
      	public static void main(String args[]) {
      		System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
      		String binary = "1111111111111111111111111111111";
      		Integer dec = binaryStringToInteger(binary);
      		System.out.println(dec);
      	}
      
      	public static int binaryStringToInteger(String s) throws NumberFormatException {
      		if (s == null)
      			throw new NumberFormatException("null");
      		int result = 0;
      		int i = 0, len = s.length();
      		int digit;
      		if (len > 0) {
      			char firstChar = s.charAt(0);
      			if (firstChar < '0') // cas du -
      				throw new NumberFormatException("For input string: \"" + s + "\"");
      
      			while (i < len) {
      				digit = s.charAt(i++) - '0';
      				if (digit < 0 || digit > 1) {
      					throw new NumberFormatException("For input string: \"" + s + "\"");
      				}
      				if (result > (Integer.MAX_VALUE / 2)) {
      					throw new NumberFormatException("For input string: \"" + s + "\"");
      				}
      				result *= 2;
      				if (result > Integer.MAX_VALUE - digit) {
      					throw new NumberFormatException("For input string: \"" + s + "\"");
      				}
      				result += digit;
      			}
      		} else {
      			throw new NumberFormatException("For input string: \"" + s + "\"");
      		}
      		return result;
      	}
      }
      



      -
      Edité par AntoineLeval 22 septembre 2017 à 18:22:07

      • Partager sur Facebook
      • Partager sur Twitter
      @autor VinYarD

      [Java's cool] Conversion binaire vers décimal

      × 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