我试图简单地使用递归转换为Binary。我在return语句中遇到问题。这会编译,但在运行时会出现溢出错误。我不知道要返回什么(或者如果我的陈述是错误的)来防止此错误。
谢谢!
public static String convertToBinary(int number)
{
if(number > 0)
{
convertToBinary(number / 2);
convertToBinary((number % 2 ));
}
return convertToBinary((number));
}
答案 0 :(得分:5)
你的问题是在数字/ 2和数字%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 + " ");
}
}
}
答案 1 :(得分:4)
好吧,问题似乎是你实际上没有在递归方法中做任何事情。
在最基本的形式中,您的递归方法应包含:
(这是一个过于简化的视图,但现在就可以了。)
问题是你错过了一些逃避条件来处理参数长一位的情况,也就是你不能再细分它了。
您的代码的另一个问题是您没有对递归调用的结果做任何事情。你应该存储和连接它们。
我建议你重新开始:编写一个首先转换单个位的方法(这将是非递归的),然后将递归添加到它。 (一般建议:不要害怕丢弃代码并从头开始。)
答案 2 :(得分:3)
假设这是作业,我会指出主要错误..
return convertToBinary((number));
返回应该返回一个值,而不是调用一个函数。这只会添加一个递归状态堆栈,导致溢出。尝试将之前调用的值保存到变量中并返回该值。
答案 3 :(得分: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
答案 4 :(得分:1)
一旦number
达到零,该方法将一次又一次地调用自己。最终return
需要返回其他内容 - 比如字符串。话虽如此,我认为这种方法并不十分理想。
答案 5 :(得分:1)
尝试以下 - :
public static String dec2Bin(int num) {
String result = ((num % 2 == 0) ? "0" : "1"); // expr
if (abs(num) > 1) {
result = dec2Bin(num / 2) + result;
}
return result;
}
答案 6 :(得分:0)
这样可行,但您必须从末尾打印
static void printBinary(int x){
if(x==0)System.out.printf("%3d", x);
else{
System.out.printf("%3d",x%2);
printBinary(x/2);
}
}
答案 7 :(得分:0)
以下将以递归方式工作。如果number为负数,则会在结果中添加“ - ”作为前缀。
void printBinary (int n) {
if (n < 0) { //base case
System.out.print("-");
printBinary(-n);
} else if (n < 2) { //base case
System.out.print(n);
return;
} else {
printBinary(n/2); //recursive step
int answer = n%2;
System.out.print(answer);
}
}
答案 8 :(得分:0)
class DecBin {
static int convert(int i) {
if (i > 0) {
convert (i/2);
System.out.println(i%2);
return 0;
} else {
return 0;
}
}
public static void main(String[] args) {
DecBin.convert(10);
}
}
答案 9 :(得分:-1)
我尝试创建一个通用的子程序,它接受任何十进制整数&amp;将其转换为必需的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
注意: - 它不适用于负数。
答案 10 :(得分:-1)
只需将(number / 2 * 10)的二进制转换添加到数字的其余部分:
int binary(int dec) {
int remainder=dec%2;
if (dec==1 || dec==0)
return dec;
else
return remainder + (binary(dec/2)*10);
}
答案 11 :(得分:-1)
public class DecImalToBinary {
public static String decimalToBinary(int num){
StringBuilder sb= new StringBuilder();
if (num <2){
return ""+ num;
}
else{
return (sb.append(num%2)) + decimalToBinary((num/2));
}
}
public static void main(String[] args){
System.out.println(decimalToBinary(8));
}
}
答案 12 :(得分:-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;
}
答案 13 :(得分:-1)
这是我的解决方案:
public static String binaerRec(int number)
{
if (number > 1)
{
return binaerRec(number / 2) + number % 2;
} else
{
return 1 + "";
}
}
玩得开心