ユーザーが10進数を2進数に入力し、2進数を逆にしてから、10進数に戻すことができるコードの実装はほぼ完了です。
2進数から10進数の部分を除いてすべてを解決しました。何を入力しても、同じ番号が何度も表示され続けます。理由がわかりません。基本的に、コードの最後の部分が間違っているのはなぜですか?配列/文字列の長さを見つけて、2^nなどを掛けるのに問題があります...
number
do-whileループ条件に応じて、常にゼロ以下になります。 while(number>0);
これにより、変数s
(より適切な変数名を選択してください...)は常に「0」になります。
私はあなたが残りを理解できると思います。
このコードには2つの問題があります。
1)10進数から2進数への変換の結果を保存していません。逆のバイナリ値を持つ文字列を格納するために、新しい文字列変数を導入する必要があります。
2)2進化10進アルゴリズムが正しくありません。s.charAt(i)はchar値を返しますが、計算に使用するにはdouble値が必要です。Math.pow(2、(s.length()--i --1))も正しくありません-逆にされていないバイナリ値用であると私は理解しています。
コードの修正バージョンは次のようになります。
public static void main(String[] args) {
int a[] = {0, 1};
int number;
int remainder;
String binary = "";
Scanner in = new Scanner(System.in);
System.out.print("Enter Decimal Number: ");
number = Integer.parseInt( in.next());
System.out.print("Binary Number in Reverse: ");
do {
remainder=number%2;
if(remainder > 0){
binary += a[1];
//System.out.print(a[1]);
}
else{
binary += a[0];
//System.out.print(a[0]);
}
number=number / 2;
} while(number>0);
System.out.print(binary);
System.out.print(" \nDecimal number: ");
//String s = Integer.toString(number);
double result = 0;
for (int i = 0; i < binary.length(); i++)
result = result + Double.parseDouble(binary.substring(i, i + 1)) * Math.pow(2, i);
System.out.print(result);
}