2017-02-18 1 views
0

J'ai écrit un programme pour une addition binaire en Java. Mais le résultat n'est parfois pas juste.
Par exemple si j'ajoute 1110 + 111. Le résultat devrait être 10101.
Mais mon programme jette 10001.
Peut-être que l'un d'entre vous trouve l'erreur.Ajout binaire en Java

import java.util.Scanner; 

public class BinaryAdder { 
public static String add(String binary1, String binary2) { 
    int a = binary1.length()-1; 
    int b = binary2.length()-1; 
    int sum = 0; 
    int carry = 0; 


    StringBuffer sb = new StringBuffer(); 
    while (a >= 0 || b >= 0) { 
     int help1 = 0; 
     int help2 = 0; 
     if(a >=0){ 
     help1 = binary1.charAt(a) == '0' ? 0 : 1; 
     a--; 
    } if(b >=0){ 
     help2 = binary2.charAt(b) == '0' ? 0 : 1; 
     b--; 
    } 
     sum = help1 +help2 +carry; 
     if(sum >=2){ 
      sb.append("0"); 
      carry = 1; 
     } else { 
      sb.append(String.valueOf(sum)); 
      carry = 0; 
     } 

    } 
    if(carry == 1){ 
     sb.append("1"); 
    } 

    sb.reverse(); 
    String s = sb.toString(); 
    s = s.replaceFirst("^0*", ""); 

    return s; 
} 


public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.print("First: "); 
    String input1 = scan.next("(0|1)*"); 
    System.out.print("Second: "); 
    String input2 = scan.next("(0|1)*"); 
    scan.close(); 
    System.out.println("Result: " + add(input1, input2)); 
} 

}

Répondre

0

cette fonction est beaucoup plus simple:

public static String binaryAdd(String binary1,String binary2){ 
    return Long.toBinaryString(Long.parseLong(binary1,2)+Long.parseLong(binary2,2)); 
} 

vous pouvez changer Long.parseLong en Integer.parseInt si vous ne vous attendez pas un très grand nombre, vous pouvez également remplacer parse(Long/Int) avec parseUnsigned(Long/Int) puisque vous ne vous attendez pas à ce que vos ficelles aient un signe négatif, n'est-ce pas?

+0

Non, le professeur demande particulièrement de très grands nombres. Mais je ne m'attends pas à des signes moins –

+0

@EC alors il suffit d'utiliser 'Long.parseUnsignedLong' et vous êtes prêt à partir, sauf si les chiffres sont encore plus grands que ce que' Long' peut contenir (plus grand que '9223372036854775807') – niceman

0

Vous ne pensez pas le cas lorsque

help1 + help2 = 3 

donc votre méthode String add(String binary1, String binary2) devrait ressembler à ceci:

public static String add(String binary1, String binary2) { 
    int a = binary1.length()-1; 
    int b = binary2.length()-1; 
    int sum = 0; 
    int carry = 0; 


    StringBuffer sb = new StringBuffer(); 
    while (a >= 0 || b >= 0) { 
     int help1 = 0; 
     int help2 = 0; 
     if(a >=0){ 
     help1 = binary1.charAt(a) == '0' ? 0 : 1; 
     a--; 
    } if(b >=0){ 
     help2 = binary2.charAt(b) == '0' ? 0 : 1; 
     b--; 
    } 
     sum = help1 +help2 +carry; 
     if (sum == 3){ 
      sb.append("1"); 
      carry = 1; 
     } 
     else if(sum ==2){ 
      sb.append("0"); 
      carry = 1; 
     } else { 
      sb.append(String.valueOf(sum)); 
      carry = 0; 
     } 

    } 
    if(carry == 1){ 
     sb.append("1"); 
    } 

    sb.reverse(); 
    String s = sb.toString(); 
    s = s.replaceFirst("^0*", ""); 

    return s; 
} 

J'espère que cela pourrait vous aider!

+0

merci beaucoup ! J'oublie vraiment cette condition –

+0

Vous êtes les bienvenus! J'espère que tu accepterais ma réponse – delca85

0
sum = help1 +help2 +carry; 
     if(sum >=2){ 
      sb.append("0"); 
      carry = 1; 
     } else { 
      sb.append(String.valueOf(sum)); 
      carry = 0; 
     } 

Si la somme est 2 alors append "0" et portent = 1

Qu'en est-il lorsque la somme est 3, ajouter "1" et porter = 1

ne sera plus jamais 4 ou plus

0

sais que je suis un peu en retard, mais je viens de faire une tâche similaire si à tout le monde dans ma position, voici comment je ... il abordé

import java.util.Scanner; 

public class Binary_Aids { 
public static void main(String args[]) { 
    System.out.println("Enter the value you want to be converted"); 
    Scanner inp = new Scanner(System.in); 
    int num = inp.nextInt(); 

    String result = ""; 

    while(num > 0) { 
     result = result + Math.floorMod(num, 2); 
     num = Math.round(num/2); 

    } 

    String flippedresult = ""; 
    for(int i = 0; i < result.length(); i++) { 
     flippedresult = result.charAt(i) + flippedresult; 
    } 

    System.out.println(flippedresult); 


} 
} 

Cela a pris une entrée et converti en binaire. Une fois ici, j'ai utilisé ce programme pour ajouter les numéros puis les reconvertir ...

import java.util.Scanner; 

public class Binary_Aids { 
public static void main(String args[]) { 
    Scanner inp = new Scanner(System.in); 

    String decimalToBinaryString = new String(); 

    System.out.println("First decimal number to be added"); 
    int num1 = inp.nextInt(); 
    String binary1 = decimalToBinaryString(num1); 




    System.out.println("Input decimal number 2"); 
    int num2 = inp.nextInt(); 
    String binary2 = decimalToBinaryString(num2); 

    int patternlength = Math.max[binary1.length[], binary2.length[]]; 

    while(binary1.length() < patternlength) { 
     binary1 = "0" + binary2; 
    } 

    System.out.println(binary1); 
    System.out.println(binary2); 

    int carry = 0; 
    int frequency_of_one; 
    String result = ""; 
    for(int i = patternlength -i; i >= 0; i--) { 
     frequency_of_one = carry; 
     if(binary1.charAt(i) == '1') { 
      frequency_of_one++; 
     } 
     if(binary2.charAt(i) == '1') { 
      frequency_of_one++; 

     } 

     switch(frequency_of_one) { 
     case 0 ; 
     carry = 0; 
     result = "1" + result; 
     break; 

     case 1 ; 
     carry = 0; 
     result = "1" + result; 
     break; 

     case 2; 
     carry = 1; 
     result = "0" + result; 
     breake; 

     case 3; 
     carry = 1; 
     result = "1" + result; 
     breake; 
     } 
    } 

    if(carry == 1) { 
     result = "1" + result; 

    } 
    System.out.println(result); 

    } 



public static String decimalToBinaryString(int decimal1) { 
String result = ""; 

while(decimal1 > 0) { 
    result = result + Math.floorMod(decimal1, 2); 
    decimal = Math.round(decimal1/2); 
} 

String flipresult = ""; 
for(int i = 0; i < result.length[]; i++) { 
    flipresult = result.charAt(i) + flippedresult; 
} 
return flippedresult; 
} 






}