2016-12-22 3 views
-2

Je dois sommer les nombres binaires, j'utilise la boucle inverse comme nous somme réellement en utilisant le papier & de stylo. Il y a donc ce tableau codé en dur de deux nombres entiers dont la longueur est égale pour éviter toute divergence. Je vérifie si somme & portent des correspondances de valeur alors la sortie devrait être faite ainsi & ainsi autrement & donc. Vérifiez le code ci-dessous.Addition binaire en utilisant Java

Ma question est pourquoi est-ce que j'obtiens une erreur en cours d'exécution quant à Array Index Out of Bounds -1, même après une compilation réussie.

public class binary{ 

static int sum, carry; 
static int output = 0; 


    public static void main(String args[]) 
    { 
     int[] a = {1,1,0,1,1,0,0,1,0,0,1}; 
     int[] b = {1,0,0,0,0,0,0,0,1,0,1}; 

     for(int i = 10; i >= 0; i--) 
     { 
      if(a[i] == 0 && b[i] == 0) 
      { 
       sum = 0; 
       carry = 0; 

      } 
      if(a[i] == 0 && b[i] == 1) 
      { 
       sum = 1; 
       carry = 0; 

      } 
      if(a[i] == 1 && b[i] == 0) 
      { 
       sum = 1; 
       carry = 0; 

      } 
      if(a[i] == 1 && b[i] == 1) 
      { 
       sum = 0; 
       carry = 1; 

      } 
      if(carry == 1) 
      { 
       carry += a[i-1] + b[i-1]; 
       output = carry; 
      } 
      else 
      { 
       output += a[i] + b[i]; 
       output = sum; 
      } 
      System.out.print(output); 
     } 
    } 
} 
+1

'i-1' quand i vaut 0 dans' carry + = a [i-1] + b [i-1]; ' – GurV

+0

Dans votre' if (carry == 1) 'vous avez' i-1 '. Quand 'i = 0' ce sera l'indice' -1' -> hors limites – Aidin

+0

Comment vois-tu les deux codes similaires. C'est une boucle ordonnée. Et j'utilise la boucle inverse. –

Répondre

0
carry += a[i-1] + b[i-1]; 

Si i vaut 0 alors vous obtiendrez l'indice -1.

+0

Merci, je vais ajouter pause et essayer de résoudre plus loin .. –

0
if(carry == 1) 
    { 
     carry += a[i-1] + b[i-1]; 
     output = carry; 
    } 

Ceci est la partie qui est à l'origine du réseau de exception..since lié pour i = 0, le report contiendra un [-1] + b [-1] qui sont de bien sûr hors limite (0 et 10 étant les bornes)