Comp sci教授在作业中给了我们这个问题……我不确定该如何进行,我编写的代码似乎失败了。这是提示:
(二进制到十进制)编写一种递归方法,将二进制数作为字符串解析为十进制整数。方法头是:
公共静态字符串bin2Dec(String binaryString)
编写一个测试程序,提示用户输入二进制字符串并显示其十进制等效项。
任何帮助,不胜感激。这是我的代码,如下所示:
import java.util.Scanner;
public class HW04_P5 {
static int index = 0;
static int power = 0;
static int number = 0;
static boolean exit = false;
@SuppressWarnings("resource")
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.print(" Enter a binary number to convert to decimal: ");
String in = scan.nextLine();
index = in.length()-1;
System.out.print(" Binary number converted to decimal: "+bin2Dec(in));
}
public static String bin2Dec(String in)
{
if((in.substring(index,index+1).equals("1"))&&(index>0))
{
number += Math.pow(2,power);
System.out.print(number);
power++;
index--;
bin2Dec(in);
}
else if((in.substring(index,index+1).equals("0"))&&(index>0))
{
power++;
index--;
bin2Dec(in);
}
System.out.print(number);
return "";
}
}
没有多余的变量index,power和p更干净。只需从右到左处理字符串。您也不想在“递归函数”之外跟踪“全局”变量号……这是令人困惑和奇怪的。我认为,您希望所有状态都包含在递归函数中。即使有这些限制,您仍然可以在基本上两行中执行此操作:
public static int bin2Dec(String s) {
if (s == null || s.isEmpty()) return 0;
else return s.charAt(s.length()-1)-48+2*bin2Dec(s.substring(0,s.length()-1));
}
我认为,这可能不是最清晰的解决方案,但它是最优雅的解决方案。可以通过将else子句分成几行来提高清晰度。48是0的Unicode字符数字,这可能不是将字符“ 0”和“ 1”转换为它们各自数字的最佳方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句