0

単純に再帰で Binary に変換しようとしています。returnステートメントに問題があります。これはコンパイルされますが、実行時にオーバーフロー エラーが発生します。このエラーを防ぐために何を返せばよいか (またはステートメントが間違っているか) がわかりません。

ありがとう!

public static String convertToBinary(int number)
{
  if(number > 0)
    {
      convertToBinary(number / 2);
      convertToBinary((number % 2 ));
     }

   return convertToBinary((number));
}
4

14 に答える 14

5

あなたの問題は、number/2 と number%2 の両方で convertToBinary を呼び出すことでした。このコードは私にとってはうまく機能し、あなたが持っていたものとそれほど違いはありません:

import java.util.Scanner;

public class DecToBin {

public static void main(String[] args) {

    int input;
    Scanner scan = new Scanner(System.in);

    System.out.print("Enter number to convert to binary: ");
    input = scan.nextInt();
    convert(input);

}

public static void convert(int num) {
    if (num>0) {
        convert(num/2);
        System.out.print(num%2 + " ");
    }
}

}
于 2012-04-05T18:09:30.127 に答える
4

問題は、再帰メソッドで実際に何もしていないことのようです。

最も基本的な形式では、再帰メソッドに次のものが含まれている必要があります。

  1. 1つ以上の脱出条件。
  2. それ自体への再帰呼び出し。

(これは過度に単純化されたビューですが、今のところは機能します。)

問題は、パラメーターが1ビット長の場合を処理するためのいくつかのエスケープ条件が欠落していることです。つまり、パラメーターをこれ以上細分化できない場合です。

コードのもう1つの問題は、再帰呼び出しの結果に対して何もしていないことです。それらを保存して連結する必要があります。

もう一度やり直すことをお勧めします。最初に単一ビットを変換するメソッドを作成し(これは非再帰的です)、次に再帰を追加します。(一般的なアドバイス:コードを破棄して最初からやり直すことを恐れないでください。)

于 2012-04-05T18:06:27.700 に答える
3

これが宿題だと仮定して、主なエラーを指摘します。

return convertToBinary((number));

戻り値は、関数を呼び出すのではなく、値を返す必要があります。これにより、再帰的な状態スタックが追加され、オーバーフローが発生します。以前の呼び出しの値を変数に保存して、それを返してみてください。

于 2012-04-05T18:06:05.890 に答える
2

これが宿題でない場合は、次のいずれかを検討してください。 http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toBinaryString%28int%29

また

http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toString%28int,%20int%29

于 2012-04-05T18:13:17.133 に答える
1

numberゼロに達すると、メソッドは単にそれ自体を何度も繰り返し呼び出します。ファイナルreturnは、文字列など、他の何かを返す必要があります。そうは言っても、このアプローチはひどく最適ではないと思います。

于 2012-04-05T18:06:00.677 に答える
-1

(数値/2*10) のバイナリ変換を残りの数値に追加するだけです。

int binary(int dec) {
    int remainder=dec%2;

    if (dec==1 || dec==0)
        return dec;
    else
        return remainder + (binary(dec/2)*10);
}
于 2016-06-06T00:44:04.467 に答える
-1

Decimal 整数を取り、それを必要な BASE に変換する汎用サブルーチンを作成しようとしました。

private Integer convertToBaseN(int num,int n, int pow)
{
    Integer r = num%n;

    if(num < n)
        return new Double((Math.pow(10, pow-1))*r.doubleValue()).intValue();

    return convertToBaseN(num/n, n,pow+1)+ 
            new Double(Math.pow(10, pow-1)*r.doubleValue()).intValue();
}

    num :- Decimal No you want to convert.
    n:- Base to which you want to convert ( n =2 in your case).
    pow = 1 (fixed);


    Input=> convertToBaseN(503,5, 1); Output=> 4003
    Input=> convertToBaseN(7,2, 1); Output=> 111

注意:- 負の数に対しては機能しません。

于 2015-06-24T04:40:30.767 に答える
-1
public String convertirABinario(int n){
    String b = "";
    if (n == 0 || n == 1){
      b = "" + n;
    }
    else{
      b = b + convertirABinario(n/2) + n%2;
    }
    return b;
}
于 2016-11-26T04:54:28.687 に答える