0

这是一个来自学校的作业问题:创建一个名为 toBinary 的递归方法,该方法将单个整数作为参数并以二进制形式输出等价物。

这是我的代码:

import java.util.*;
class MethodAssign6{
static void toBinary(int a){
    if(a==0){
        System.out.print("theArrayOrStringIWant");
    }
    else{
        System.out.println(a%2);
        toBinary(a/2);
    }
}
public static void main(String[]args){
    toBinary(24);
}
}

如您所见,当问题只希望我将单个整数作为参数时,我不知道如何创建一个数组来保存所有 a%2 值。任何人请帮助我,我将不胜感激。

4

4 回答 4

3

我认为您走在正确的轨道上,但是您当前的方法会将数字向后打印。尝试进行递归调用,然后打印:

static void toBinary(int a){
    if(a!=0) {
        toBinary(a/2);
        System.out.print(a%2);
    }
}

您也可以使用字符串获得类似的效果:

static String toBinary(int a){
    if(a==0) {
        return "";
    }
    else {
        return toBinary(a/2) + (a%2);
    }
}

public static void main(String[]args){
    System.out.println(toBinary(24));
}
于 2012-10-17T03:43:49.010 回答
1

通常,像这样的递归方法将有一个公共方法和一个用于完成计算的私有方法。所以公共方法接受一个整数,然后设置数组来保存这些值。私有数组接受整数和当前数组,因此它可以将其值添加到数组中。最后,当私有方法返回时,公共方法会解析数组并返回结果。

于 2012-10-17T03:39:28.553 回答
1

如果您所要做的只是打印这些位,那么您实际上不需要将它们保存在一个数组中。您可以随时使用 System.out.print。确保注意调用 print 和递归调用的顺序,以免向后打印数字。

于 2012-10-17T03:42:16.587 回答
-1
// static String[] valsbyte = new String[10]; // global variable if you return a string
static byte[] valsbyte = new byte[10]; // global variable


// static String[] toBinary(int a){ // if you return a string
static byte[] toBinary(int a){
n++;
if(n>10){ // check recursion to jump over process and internal method call


// valsbyte[n] = a%2; // if you reurn a string

valsbyte[n] = new Integer(ax).byteValue(); // convert to byte



//LAST LINE OF METHOD
return valsbyte[n];
于 2012-10-17T03:57:16.123 回答