写一个递归程序,它取一个长度为N的字符串,只包含0和1作为输入和 对字符串中指定的二进制数执行1的补码。如何做的一个例子 程序应该转换给定的输入在这里给出:
输入:010001001→110001001→100001001→... 101110110(输出)
import edu.princeton.cs.introcs.StdOut;
public class labb1q1b {
public static void main(String[] args)
{
String b = "010001001";
StdOut.print(invert(b));
}
public static String invert(String input)
{
String temp = "";
for(int i = input.length(); i >= 0; i--)
{
temp += Character.getNumericValue(input.charAt(i));
}
return temp;
}
}
答案 0 :(得分:0)
这不是递归。要递归,请使用同一方法中的方法。在你的情况下,你可以在其中调用invert()来连续编辑字符串,与for循环相同但是。
答案 1 :(得分:-1)
编辑:Character.getNumericValue
在这里工作,假设。但它对无效输入行为错误,例如'A'
(返回10
)或'$'
(返回-1
)。为了将来参考,它可以假设使用,但最好以这种方式阅读。
以下是修复:您要检查特定点的字符,如果是'0'
,请添加"1"
,否则添加"0"
。
使用此:
public static String invert(String input)
{
String temp = "";
//Iterate thru all of the characters in the string, in order of first to last
for(int i = 0; i < input.length(); i++)
{
if (input.charAt(i) == '0') {
temp += "1";
} else {
temp += "0";
}
}
return temp;
}
另外,请注意我已经交换了for
循环运行的顺序。这样可以防止字符串被反转,并且还可以防止出现超出范围的错误。