2017-02-24 6 views
-4

10進数を手動でバイナリに変換する必要がありますが、1-256の範囲から出力する必要があります。私はちょうど256までの小数点をインクリメントするための変数を取って、それをバイナリ変換の入力として使用すると信じていますが、無限ループが続きます。私はバイナリ変換関数を使用することはできませんので、私は手動で変換する必要があります。私はwhileループを使ってJavaの10進数をバイナリに変換する必要があります

int decimal; 
for (decimal = 1; decimal <= 256; decimal++) //this is how i get from 1-256 

//this is the binary where i keep getting the infinite loop 
int binaryNumber = 0; 
     while (decimal > 0) { 
      decimal = decimal/2; 
      binaryNumber = (decimal % 2) + binaryNumber; 
      } 
     System.out.println(binaryNumber); 

私は間違っています、ありがとうございますか?

+1

を試してみてくださいされていません –

+1

'decimal'を2で割ったままにすると、外側のループが終了しないように*決して* 256に達しません。解決策:外側ループの一時変数に 'decimal 'をコピーし、内側ループに一時変数を使用します。 –

+0

あなたはいくつかの中括弧などを忘れてしまったと思います。forループの下のコードはすべてボディの一部です。それがそうであれば、それが0になるまで 'decimal'を減らすべきではありません_inside_> 256までループするループ。 – Thomas

答えて

0

は、再帰的なソリューションです。ここ

public class Class { 
    private static String intToBinary(final int input, final int count) { 
    int powerOf2 = (int) Math.pow(2, count); 
    if (count < 0) { 
     return ""; 
    } else if (input < powerOf2) { 
     return "0" + intToBinary(input, count - 1); 
    } else { 
     return "1" + intToBinary(input - powerOf2, count - 1); 
    } 
    } 

    public static String intToBinary(final int input) { 
    return intToBinary(input, (int) Math.ceil(Math.log(input)/Math.log(2))); 
    } 

    public static void main(String... args) { 
    System.out.println(intToBinary(7)); 
    System.out.println(intToBinary(8)); 
    System.out.println(intToBinary(100)); 
    System.out.println(intToBinary(1234567890)); 
    } 
} 

は、whileループで同じアルゴリズムである:

public class Class { 
    public static String intToBinary(final int input) { 
    int count = (int) Math.ceil(Math.log(input)/Math.log(2)); 
    int remaining = input; 
    final StringBuilder output = new StringBuilder(); 
    while (count >= 0) { 
     final int powerOf2 = (int) Math.pow(2, count); 
     if (remaining < powerOf2) { 
     output.append("0"); 
     } else { 
     output.append("1"); 
     remaining -= powerOf2; 
     } 
     count--; 
    } 
    return output.toString(); 
    } 

    public static void main(String... args) { 
    System.out.println(intToBinary(7)); 
    System.out.println(intToBinary(8)); 
    System.out.println(intToBinary(100)); 
    System.out.println(intToBinary(1234567890)); 
    } 
} 
+0

私は残念ながら変換のwhileループを使用する必要がありますが、ありがとう! – deyizzle

+0

私の答えを更新しました – Andreas

0

10進数を0に設定したforループの各繰り返しで問題が発生します。forループをiと同じように変更し、decimal = iを割り当てます。ここで

+0

私は何を私として初期化するだろうか? – deyizzle

0

が、これはさえコンパイルされていないこの

public static void main(String[] args) { 

int [] nums = new int [256]; 

for (int i =0; i< nums.length;i++) 
    { 

     nums[i] = i+1; 
    } 

for (int i =0; i< nums.length;i++) 
    { 

     System.out.println(decimalTobinary(nums[i])); 
    } 


} 

public static String decimalTobinary(int num){ 
int binary[] = new int[9]; 
int index = 0; 
while(num > 0) 
     { 
     binary[index++] = num%2; 
     num = num/2; 
     } 

StringBuilder sb = new StringBuilder(); 
for(int i = index-1;i >= 0;i--) 
     { 
      sb.append(binary[i]); 
     } 
     return sb.toString(); 
    } 
} 
関連する問題