2016-04-19 3 views
0

私は単純な電卓のtoBinaryStringを使って整数を2進換算に変換しています。加算の他に数学演算を行うときはいつでも先頭に1を、0にすることはできません。toBinaryStringは先頭に1をつけています

例えば、私は、バイナリで5または101を与えるべきである10から5を引くが、代わりに私が

出力を得る:11111111111111111111111111110001

が、これは「私はドンtoBinaryStringの問題ですが知っているのですか、何か間違っていますか?

メインコード:

if (input == 1) 
    { 
     System.out.println("- ADDITION -"); 
     toDo = operator.getInputs(input); // Gets how many values to input. 
     ArrayList<Integer> list = new ArrayList<>(toDo); 
     operator.addToList(list, toDo); // Adds values input to list. 
     operator.addBinary(list); // Add values in 'list' together. 
    } 

    if (input == 2) 
    { 
     System.out.println("- Subtraction -"); 
     toDo = operator.getInputs(input); // Gets how many values to input. 
     ArrayList<Integer> list = new ArrayList<>(toDo); 
     operator.addToList(list, toDo); // Adds values input to list. 
     operator.subBinary(list); // Subtract values in 'list' for eachother. 
    } 

    if (input == 3) 
    { 
     System.out.println("- Multiplication -"); 
     toDo = operator.getInputs(input); // Gets how many values to input. 
     ArrayList<Integer> list = new ArrayList<>(toDo); 
     operator.addToList(list, toDo); // Adds values input to list. 
     operator.multBinary(list); // Multiplies values in 'list' together. 
    } 

方法:あなたがうまく機能していないsubBinary

class binaryOperations 
{ 
private Scanner scan = new Scanner(System.in); 

int getInputs(int b) 
{ 
    int input; 
    System.out.println("How many integers do you wish to input: "); 
    return input = scan.nextInt(); 
} 

int printBinary(int b) // Number to convert 
{ 
    String foo = Integer.toBinaryString(b); // Convert input to binary 
    return (Integer.parseInt(foo)); 
} 

ArrayList<Integer> addToList(ArrayList<Integer> list, int toDo) 
{ 
    for (int i = 0; i < toDo; i++) 
    { 
     if (i == 0) 
      System.out.println("Please enter the first integer:"); 
     else 
      System.out.println("Please enter the next integer: "); 

     int input = scan.nextInt(); 
     list.add(input); 
    } 
    return list; 
} 


// Addition // 
void addBinary(ArrayList<Integer> list) 
{ 
    int temp = 0, sum = 0; 
    for (int i = 0; i <= list.size() - 1; i++) 
    { 
     temp = list.get(i); 
     sum += temp; 
    } 

    String foo = Integer.toBinaryString(sum); // convert the sum to a string 

    System.out.println("The sum of the numbers in binary is " + foo); 
} 

// Subtraction // 
void subBinary(ArrayList<Integer> list) 
{ 
    int temp = 0, difference = 0; 
    for (int i = 0; i <= list.size() - 1; i++) 
    { 
     temp = list.get(i); 
     difference -= temp; 
    } 

    String foo = Integer.toBinaryString(difference); // convert the difference to a string 

    System.out.println("The difference of the numbers in binary is " + foo); 
} 

// Multiplication // 
void multBinary(ArrayList<Integer> list) 
{ 
    int temp = 0, products = 0; 
    for (int i = 0; i <= list.size() - 1; i++) 
    { 
     temp = list.get(i); 
     products *= temp; 
    } 

    String foo = Integer.toBinaryString(products); 

    System.out.println("The products of the numbers in binary is " + foo); 
} 
} 
+1

なぜ彼らはそこにいけないのですか? 1つの問題を表示するだけの複雑なコードがあります。 [MCVE]を提供して、間違っていると思われることを説明してください。 – Savior

+0

@Pillarもし1のバイナリ値が00000001であれば、どうして私は減算をするのですか 'バイナリの数字の違いは11111111111111111111111111111111です。追加すると正しい1が得られますか? – primelf

+0

問題は 'subBinary'ロジックであり、' toBinaryString'メソッドではありません –

答えて

2

。何それがないことである:

11111111 11111111 11111111 11110001 

あなたがするために必要なもの:あなたのケースで非常に

0 - firstElementofList - secondElementofList ... 

あなたのリストが含まれている場合は、{10,5}が、あなたは正確にバイナリ値を以下で表される-15を取得します行う最初のものから、残りを引くために、おそらく、それを変更することです:

void subBinary(ArrayList<Integer> list) 
{ 
    int temp = 0, difference = list.get(0); 
    for (int i = 1; i <= list.size() - 1; i++) 
    { 
     temp = list.get(i); 
     difference -= temp; 
    } 

    String foo = Integer.toBinaryString(difference); // convert the difference to a string 

    System.out.println("The difference of the numbers in binary is " + foo); 
} 

あなたが{5,10}を供給している場合今、あなたは-5

を取得します
+0

私は実際にこれが当てはまると思っていましたので、私は入力を逆にして5を行い、10を{5、10}としました。出力。 – primelf

+1

同じ入力セットでは常に同じ出力になります。 @Pooyaが話していることはあなたのロジックです。あなたは 'difference = list.get(0)'で始まり、 'difference'からリスト内の他のすべての値を減算することから始めるべきです。あなたが現在行っていることは、あなたが '0'からリストにあるすべての価値を引きます。 –

+0

@MarwanAlani編集した後で分かります。助けてくれてありがとう。なぜ私はそれに気付かなかったのかわかりません。 – primelf

関連する問題