这是我将二进制转换为格雷码的功能。
public void convert(String bin)
{
char[] b = bin.toCharArray();
char[] g = new char[100];
System.out.print(g[0]);
for(int i=1;i<b.length;i++)
{
System.out.print(g[i] = (b[i-1] + b[i]) - 96);
if(g[i] == '2')
{
System.out.print(0);
i++;
continue;
}
System.out.print(g[i] - 0);
}
}
我有上面的功能完全正常,但我想从这个函数返回转换后的字符串。所以我想出了下面给出的代码,它没有正常工作,它只给出了我在开始时存储的单个数字,即结果为g [0] = b [0]。
public String convert(String bin)
{
char[] b = bin.toCharArray();
char[] g = new char[100];
g[0] = b[0];
for(int i=1;i<b.length;i++)
{
g[i] = (char)((b[i-1] + b[i]) - 96);
if(g[i] == '2')
{
g[i] = 0;
i++;
continue;
}
g[i] = g[i] - 0;
}
String gray = String.valueOf(g);
return gray;
}
我该怎么做才能给我想要的结果。
由于
答案 0 :(得分:1)
public static String convert(String bin)
{
//System.out.println( "The Gray Equivalent Is: ");
char[] b = bin.toCharArray();
StringBuilder g = new StringBuilder(); // Use StringBuilder
g.append(b[0]);
//System.out.print(g[0]);
for(int i=1;i<b.length;i++)
{
int val = (int)b[i-1] ^(int) b[i]; // use exclusive-or( ^ )
if(val == '2')
{
//System.out.print(0);
g.append(0);
i++;
continue;
}
//System.out.print(g[i] - 0);
g.append(val);
}
String gray = String.valueOf(g);
return gray;
}
答案 1 :(得分:0)
我明白你想要达到的目标。但是您将整数值误认为字符值。看:
int
是一个整数数值,可以包含正数和负数:-3,-2,-1,0,1,2,3 ...
char
仍然是一个数字值,但表示为字母:&#39; a&#39;(97),&#39; b&#39;(98),&#39; c&# 39;(99)...
我知道你已经知道了这一点,因为你已经足够小心地计算两个字符的总和并将其标准化为2 *&#39; 0&#39; (= 96)。好。
但您必须注意代码中包含的每个数字都隐式为int
。现在,要意识到您要将ints
和chars
分成几行:
if(g[i] == '2')
g[i] = 0;
g[i] = g[i] - 0;
我的建议:点击订单:
int digit0=b[i - 1]-'0';
int digit1=b[i]-'0';
int result=digit0 + digit1;
if (result==2)
{
result=0;
}
g[i]=(char)(result + '0');
在最后一个地方,您还必须控制数组的长度:如果您知道输入数组的长度,则应该使用相同的长度预先调整输出数组的大小。