Affectation de calculatrice binaire (Java) [fermé]


Voici la description des exigences de la mission:

Pour ce laboratoire, vous allez entrer deux nombres en base dix et les traduire en binaire. Vous ajouterez ensuite les nombres en binaire et imprimerez le résultat. Tous les nombres entrés seront compris entre 0 et 255, inclus, et la sortie binaire est limitée à 8 bits. Cela signifie que la somme des deux nombres ajoutés sera également limitée à 8 bits. Si la somme des deux nombres est supérieure à 8 bits, veuillez imprimer les 8 premiers chiffres de la somme et le message "Erreur: débordement". Votre programme doit représenter des nombres binaires à l'aide de tableaux entiers, avec le chiffre un (2^0) stocké à l'index 0, le chiffre deux (2^1) stocké à l'index 1, jusqu'au chiffre 2^7 stocké à l'index 7. Votre programme doit inclure les méthodes suivantes: int [] convertToBinary (int b) Traduit le paramètre en une valeur binaire et le renvoie stocké sous forme de tableau d'ints. void printBin (int b[])Affiche le nombre binaire stocké dans le tableau sur un ligne. Veuillez noter qu'il devrait y avoir exactement un espace entre chaque sortie 0 ou 1. int[] addBin(int a[], int b[])Ajoute les deux nombres binaires stockées dans les tableaux, et renvoie la somme dans un nouveau tableau d'entiers.

En entrant mon code dans CodeRunner (qui teste le code et renvoie une note en fonction des résultats de chaque test), je n'arrive pas à réussir l'un des tests. C'est le message que je reçois:

*Vous avez réussi 43 des 44 tests correctement. Votre score est 97%.

Les tests qui ont échoué étaient: Test: Méthode addBin () Incorrect: Numéro incorrect retourné *

Voilà mon code:

import java.util.Scanner;

class Main {
public static int [] convertToBinary(int a){
int [] bin = {0,0,0,0,0,0,0,0};
for(int i = bin.length-1; i >= 0; i--){
 bin[i] = a%2;
 a = a/2;
}
return bin;
 }

public static void printBin(int [] b){
int z;
    for(z=0; z < b.length; z++){
      System.out.print(b[z] + " ");  
    }
    System.out.println();
}

public static int [] addBin(int [] c, int [] d){
int [] added = new int [8];
int remain = 0;
for(int x = added.length -1; x >= 0; x--)
{
 added[x] = (c[x] + d[x] + remain) % 2;
 remain = (c[x] + d[x] + remain)/2;
}
if (added[0] + c[0] + d[0] == 1){
added[0] = 1;
}
else if( (added[0] + c[0]+ d[0] == 2) || (added[0] + c[0]+ d[0] == 3) )  
{

System.out.println("Error: overflow");
}
//System.out.println(added);
//don't need to print added, but it is the only way to check it
return added;
}

public static void main(String[] args){
Scanner scan = new Scanner (System.in);
System.out.println("Enter a base ten number between 0 and 255, inclusive.");
int num1 = scan.nextInt();
System.out.println("Enter a base ten number between 0 and 255, inclusive.");
int num2 = scan.nextInt();

int [] bin;
bin = convertToBinary(num1);
System.out.println("First binary number:");
printBin(bin);
int [] bin1 = bin;

bin = convertToBinary(num2);
System.out.println("Second binary number:");
printBin(bin);
int [] bin2 = bin;


System.out.println("Added:");
{
printBin(addBin(bin1,bin2));
}
 }}

Si quelqu'un pouvait jeter un oeil à mon code ci-dessus et voir s'il pouvait me dire ce qui doit être changé pour corriger la méthode addbin() afin qu'elle passe tous les tests, ce serait génial! Toute aide est grandement appréciée, même si vous n'êtes pas sûr que ça marcherait! Merci!

Author: java513, 2015-12-11

1 answers

Vous ajoutez dans la mauvaise direction.

Chiffre des unités (2^0) stockés à l'indice 0, les deux chiffres (2^1) stockés à l'indice 1, tout le chemin jusqu'à la 2^7 chiffres stockés à l'indice 7

Cela signifie que:

int[] num1 = {1,0,1,0,0,0,0,0}; // 5
int[] num2 = {0,1,1,0,1,0,0,0}; // 22
int[] res = addBin(num1, num2); // 27 = {1,1,0,1,1,0,0,0}

Vous ajoutez à partir de la fin, en roulant les reports vers la gauche:

  {  1,0,1,0,0,0,0,0}
+ {  0,1,1,0,1,0,0,0}
= {1,0,0,0,0,1,0,0,0} // Error: overflow
 1
Author: Andreas, 2015-12-11 03:20:59