Programme qui calcule du binaire -> où est le problème?

Fermé
Linquisiteur - Modifié par Linquisiteur le 4/02/2013 à 20:41
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 6 févr. 2013 à 20:59
Bonjour, je suis débutant en java et j'essaye depuis maintenant un bon moment de faire des programmes pour calculer des nombres en binaire mais je me frottes encore et encore a des erreur.. Pouvez vous m'aidez à les trouver? Sa consiste surtout a l'utilisation des strings...

import java.util.Scanner; 

public class Travail2 
{ 
  public static void main(String args[]) 
  { 
   
 int nb; 
 int cpt = 0; 
 int multi = 1; 
 int total = 0; 
 int x; 
 int bon = 1; 
 int signe; 
 int A = 1; 

    Scanner clavier = new Scanner(System.in); 

 System.out.println("Entrez un nombre binaire: "); 
  
 nb = Clavier.lireInt();

 String nb; 
 String nb[]=new String[ct]; 
 String buffer nb = new StringBuffer[nb]; 
 x = nb.charAt(0);
  
 if (x == '0')
 { 
 signe = 0; 
 } 
 else if (x == '1')
 { 
 signe = 1; 
 } 
 else // ou faut 
 { 
 System.out.println("Ce n'est pas un nombre binaire"); 
 } 
  
 if (signe == '0') 
 { 
  while (cpt < 8) 
  { 
  x = nb.charAt(8-cpt); 
  } 
 else if (signe == '1') 
 { 
  while (cpt < 8)
  { 
  x = nb.charAt(8-cpt); 
  
   if (x == 0)
   { 
   nb.charAt(8-cpt) = 1; 
   } 
   else 
   { 
   nb.charAt(8-cpt) = 0; 
   } 
  cpt++; 
  } 
  cpt = O; 
  while (cpt < 0)
  { 
      if (nb.charAt(8-cpt) == 0)
      { 
      nb.charAt(8-cpt) = 1; 
      cpt = 8; 
      } 
      else 
      { 
      nb.charAt(8-cpt) = 0; 
      } 
 } 
 


Le but étant de trouver un nombre binaire signé et de 8 chiffres (pas trouver n'importe quel nombre non plus..) en utilisant seulement string et string buffer plus les fonctions habituelle..
Si quelqu'un pouvait m'aider se serait sympa car la je coince

7 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 févr. 2013 à 20:50
signe = 0; et if (signe == '0') ce n'est pas compatible, idem pour 1 et '1'

Ensuite, tu ne peux pas faire nb.charAt(8-cpt) = 1; car un String n'est jamais modifiable ! Essayes plutôt de travailler sur des tableaux char[], ce sera mieux.

Pour les autres erreurs on verra plus tard, certaines devrait disparaître toute seule quand tu modifieras ton code...
0
j'ai modifier les ' ' en les supprimant j'avais completement oublier les code ascii --'
sinon je ne vois pas ce que tu veux dire pour le reste..
Je dois utiliser des string ou string buffer
De plus je n'ai presque plus de temps pour finir le devoir (pas que je m'y prend a la bourre mais trop de devoir en un coup..) 3 en c 1 en shell et 3 en java --' plus contrôle... Mais je coince sur ce programme et pas moyen de le résoudre... Après je dois encore le faire avec la mantisse --'
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 févr. 2013 à 21:14
Ce que je veux dire c'est que tu ne peux pas modifier le caractère d'un String, mais le StringBuffer serait effectivement une alternative envisageable.
0
j'utilise un string buffer. enfin je crois mais je comprend pas vraiment..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
voila j'ai un peu avancer dans mon programme:

import java.util.Scanner;
public class binaire2
{
  public static void main(String args[])
  {
	Scanner clavier = new Scanner(System.in);
	
	
	boolean bon = false ; //on  en supposant que la chaine binaire entré est bonne	
	String nb = "";
	do{
		System.out.println("Entrez un nombre binaire sur 8 bits: ");
		nb = clavier.nextLine();
		boolean estBinaire = true ;
		for (int i=0; i<nb.length() & estBinaire ;i++)
			estBinaire = nb.charAt(i) == '1' | nb.charAt(i) == '0';
		if (estBinaire && nb.length() == 8 )bon = true; 
	
	}while(!bon);// nb correctement initialisé
	
	//.................................................................. partie positif
	int cpt = 0;
	int x;
	int signe;
	x = nb.charAt(cpt)-'0';
	
	if (x == 0)  // on vérifie si le nombre binaire est: positif
	{
	signe = 0; //positif
	}
	else
	{
	signe = 1; //négatif
	System.out.println("x vaut 1");
	}
	
	double total = 0;
	cpt = 1;
	
	while(cpt < nb.length() && bon == true && signe == 0) // Compte la taille du string
	{
		System.out.println("bouclepositif");
	x = nb.charAt(cpt)-'0'; // x contiendra les nombres binaire
	
		total = total + Math.pow(2,(nb.length()-cpt))*x;
		cpt++;	
	}
	//total = total/2;//Tout les résultats se trouvai au double sans..
	
	//......................................................................partie négatif

	
	StringBuffer A1 = new StringBuffer("");
	
	while(cpt < nb.length() && bon == true && signe == 1) // Compte la taille du string
	{
		System.out.println("bouclenégatif");
	x = nb.charAt(cpt)-'0'; // x contiendra les nombres binaire
	System.out.println("x neg vaut:"+x);
		if (x == 0) // complément A1
		{		
			System.out.println("Le nombre x 1 est :"+x);
			
			A1.append("1"); //on reconstitue une nouvelle chaine binaire
			cpt++;
			
			System.out.println("Le nombre A1 est :"+A1);
		}
		else
		{
			System.out.println("Le nombre x 2 est :"+x);
			
			A1.append("0"); //on reconstitue une nouvelle chaine binaire
			cpt++;
		}
	}
	
	System.out.println("Le nombre A1 est :"+A1);
	
	cpt = 0;
	
	while(cpt < nb.length()-1 && bon == true && signe == 1) // Compte la taille du string
	{
		x = nb.charAt(cpt)-'0'; // x contiendra les nombres binaire
		
		if (x == 0 && signe == 1) // complément A2
		{
			A1.setCharAt(cpt,'1');
			System.out.println("Troll");
			cpt++;
		}
		else
		{	
			A1.setCharAt(cpt,'0');
			
			signe = 0;
			System.out.println("Fin");
		}
		
	}
    
	System.out.println("Le nombre A1 est :"+A1);
	
	while(cpt < nb.length()-1 && bon == true && signe == 0) // Compte la taille du string
	{
	total = total + Math.pow(2,(A1.length()-cpt))*x;
	cpt++;
	}
	
	total = total/2; //Sinon je possède le double de la valeur voulu	
	
	if (bon == true) //si il s'agit bien d'une chaine binaire
	{
	System.out.println("Le nombre décimal est :"+total);
	}
	else // La chaine binaire est mauvaise
	{
	System.out.println("Le nombre binaire que vous avez entré n'est pas bon");
	}

  }
}




mais pas moyen de sortir les négatif --'
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 févr. 2013 à 18:35
Vu ce que tu fais, il n'y a AUCUNE raison d'avoir des double, ce sont des nombres entiers qu'il faut que tu utilises. En plus tu dis avoir des problèmes avec les négatifs, mais avec les positifs aussi. Rien que "00000001" ça donne 1.9921875...

Et puis c'est looooong ! 120 lignes pour un code qui doit en faire 20 maxi, c'est vraiment compliqué à comprendre tellement tu es loin de ce qu'on attend de toi.
Alors y a rien d'étonnant à ce que ça plante, tu te perds en complications inutiles !
0
désoler je débute avec le java.. Pour la fonction double ce n'est que a cause de la fonction pow que je l'utilise. Le programme est long mais j'ai préféré le découper en plusieurs gros morceau pour avoir plus simple
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 6/02/2013 à 19:12
Non, non, là tu t'égares. Quand je vois que tu as 5 boucles, c'est énorme.
Tu as juste à lire les caractères un à un pour faire ton calcul, donc une seule boucle suffit !
Et puis tu n'as pas besoin de faire des puissances, et encore moins avec pow...
Il faut absolument que tu revoies l'algorithme de conversion binaire à décimal, car là c'est vraiment beaucoup plus compliqué que nécessaire !

Déjà dans un premier temps, ne prends pas en compte les cas particuliers, pars du principe que ta chaîne est déjà de taille 8 avec que des 0 et 1, et tu fais le calcul de base (1 seule boucle, 20 lignes maximum, si c'est plus, c'est faux).
Et une fois que ça marchera tu pourras rajouter des avertissements pour dire que la chaîne n'est pas correcte, mais c'est vraiment pas le plus important !
0
Tu pourrais me dire comment mettre un string dans un string buffer? Je n'ai pas trouver.. j'ai essayer 2, 3 truc sans succès
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 févr. 2013 à 20:59
Voici un exemple :

StringBuffer sb = new StringBuffer();
sb.append("texte");

Cependant tu n'as pas besoin de ça pour ton programme ! La seule méthode qui te sera utile c'est charAt(i), et éventuellement length, mais tout le reste ne te servira à rien !
0