0

入力された 2 進数を 10 進数に変換するプログラムを作成しようとしている初心者プログラマーです。私が知る限り、数学とコードは正しく、コンパイル エラーは返されませんが、出力される数値は正しい 10 進数ではありません。私のコードは次のとおりです。

  String num;
  double result = 0;
  do {
  Scanner in = new Scanner(System.in);
  System.out.println("Please enter a binary number or enter 'quit' to quit: ");
  num = in.nextLine();
  int l = num.length();
  if (num.indexOf("0")==-1 || num.indexOf("1")==-1 ){
    System.out.println("You did not enter a binary number.");
  }

  for (int i = 0; i < l; i++)
{ 
  result = result + (num.charAt(i) * Math.pow(2, (l - i)));
}
System.out.println("The resulting decimal number is: " +result);
  } while (!num.equals("quit"));


  if (num.equals("quit")){
    System.out.println("You chose to exit the program.");
    return;
  }

あなたが与えることができるどんな助けも大歓迎です. 私は質問をできるだけ明確にするように努めましたが、質問があればできる限り答えようとします。私はこれを長くやっていません。私が必要とするのは、誰かがそれを見て、できれば私がどこかで犯したエラーを見つけることだけです、ありがとう.

4

4 に答える 4

2

変化する

result = result + (num.charAt(i) * Math.pow(2, (l - i)));

result = result + ((num.charAt(i) - '0') * Math.pow(2, i));

またはよりコンパクトに、

result += (num.charAt(i) - '0') * Math.pow(2, i);

文字'0'は数字と同じものではないことに注意してください0(とは同じです'1'1num.charAt(i)整数ではなく文字を返します。


int a = '0';
int b = 0;
System.out.println(Math.pow(2, a));
System.out.println(Math.pow(2, b));

出力:

2.81474976710656E14
1.0

大きな違いはありませんか?

于 2012-10-10T00:28:09.457 に答える
1

この関数String.charAt();は、ビットで乗算できる0または1の数値を返しませんが、文字「id」を返します。String/charを数値に変換する必要があります。

String num;
  double result = 0;
  do {
  Scanner in = new Scanner(System.in);
  System.out.println("Please enter a binary number or enter 'quit' to quit: ");
  num = in.nextLine();
  int l = num.length();
  if (num.indexOf("0")==-1 || num.indexOf("1")==-1 ){
    System.out.println("You did not enter a binary number.");
  }

  for (int i = 0; i < l; i++)
{ 
  result = result + (Integer.parseInt(num.substring(i,i+1)) * Math.pow(2, (l - i)));
}
System.out.println("The resulting decimal number is: " +result);
  } while (!num.equals("quit"));


  if (num.equals("quit")){
    System.out.println("You chose to exit the program.");
    return;
  }

ちなみに、0も1も含まない文字列が2進数ではないのはなぜですか?1111たとえば考えてみてください。「0でも1でもない」をチェックしたほうがいいと思います

if (num.indexOf("0")==-1 && num.indexOf("1")==-1 ){
    System.out.println("You did not enter a binary number.");
  }
于 2012-10-10T00:28:30.863 に答える
0

num.charAt(i)位置にある文字のASCIIコードを提供することに注意してくださいi。これはあなたが望む値ではありません。int値を使用して計算を行う前に、各文字の数字を前に変換する必要があります。

于 2012-10-10T00:29:47.757 に答える
0

Integer.parseInt(string, base)「ベース」基数を使用して文字列を整数に解析します。変換できない場合は、例外が発生します。

import java.util.Scanner;

public class Convertion {

    public static void main(String[] args) {
        String num;
        Scanner in = new Scanner(System.in);
        System.out.println("Please enter a binary number");
        num = in.nextLine();
        try{
              //this does the conversion
              System.out.println(Integer.parseInt(num, 2));
        } catch (NumberFormatException e){
              System.out.println("Number entered is not binary");
        }  
    }
}
于 2012-10-10T02:10:05.563 に答える