Java 将字符串二进制转换为整数十进制

Java 将字符串二进制转换为整数十进制,java,recursion,Java,Recursion,我需要使用递归,但我似乎无法理解。我需要创建一个方法来调用,该方法将二进制字符串转换为整数十进制形式。我只需要用递归就可以了。这意味着没有全局变量或循环。 以下是我所拥有的: public class Practice { public static void main( String[] args ) { if( convert( "1010111" ) == 57) { System.out.println( "t

我需要使用递归,但我似乎无法理解。我需要创建一个方法来调用,该方法将二进制字符串转换为整数十进制形式。我只需要用递归就可以了。这意味着没有全局变量或循环。 以下是我所拥有的:

public class Practice {
    public static void main( String[] args ) {
        if( convert( "1010111" ) == 57) {
            System.out.println( "test worked: 57" );
        }
        
        if( convert( "1110001" ) == 113) {
            System.out.println( "test worked: 113" );
        }
    }

    public static int convert( String temp ) {
        Integer.parseInt(temp);
        if(Integer.parseInt(temp)>0) {
            return 0;
        } 
        return temp/%100 + convert(temp*2)
        }
    }
}


 
输出:

测试工作:57

测试工作:113


如果二进制字符串只有一位数长,那么任务就很简单


对于长度n>1的字符串,分为前n-1位和最后一位。通过递归调用找到前n-1个数字的值,然后将结果乘以2,再加上最后一个数字。

如果您需要将递归用作家庭作业或练习,以下是您可以考虑的方法:

伪代码:

int convert(String input) {
  if input is empty {
    return 0;
  }
  else {

    int lastDigit = last digit of input
    String prefix = input excluding last digit
    int result = convert(prefix) * 2 + lastDigit
  }

}

顺便说一下,1010111是87,而不是57。

您的代码甚至没有编译。temp是一个字符串,不能对字符串执行temp/%100或temp*2操作。一般建议:不要将变量命名为“temp”,除非它确实是非常临时的,也就是说,它的使用只持续几个语句。特别是,方法参数很少是临时的。这意味着没有全局变量或loopsso Integer.parseInt不被视为递归?不,递归意味着函数正在调用自身。@JamesCalhone递归是,在convert内部调用convert。这里的Integer.parseInt只是一个语句。如何获取前缀和lastdigit?这是一种可能的方法,还有很多其他方法。试一试,看看你能找到什么。如果这很可能是OP的家庭作业,我宁愿不提供实际的代码。相反,我们应该给他一个暗示,让他自己帮他解决这个问题
public static int convert( String s ) 
{
  int n = s.length();
  if(n == 0)
    return 0;
  else
    return Character.getNumericValue(s.charAt(n-1)) + 2*convert(s.substring(0, n-1));
}