构建字符串的程序问题
Issue with Program that builds strings
我编写了一个程序,对两个二进制数执行某些运算(AND、OR、NOR、NAND、NOT、XOR)并 returns 结果。我使用 stringbuilder 来生成结果。该程序的方法使用 for 循环遍历 BinaryA 中的每个字符(因为它们的长度相同),然后使用基于真值 table 的算法来获得结果。
我遇到的唯一问题是结果一直输出 00000000 或 11111111。我不确定我的逻辑问题是什么:
public class Driver {
public static void main(String[] args) {
String Operator = "AND";
String binA = "10110101";
String binB = "00110001";
System.out.println(Operator + " and binary numbers " + binA + " and " + binB + " result in the output " + doOperation(Operator, binA, binB));
}
public static StringBuilder doOperation(String Operator, String BinaryA, String BinaryB)
{
StringBuilder result = new StringBuilder();
for(int i = 0; i < BinaryA.length(); i++)
{
if(Operator.equals("AND"))
{
if(BinaryA.equals("1") && BinaryB.equals("1"))
result.append('1');
else
result.append('0');
}
else if (Operator.equals("OR"))
{
if(BinaryA.equals("0") && BinaryB.equals("0"))
result.append('0');
else
result.append('1');
}
else if (Operator.equals("NAND"))
{
if(BinaryA.equals("1") && (BinaryB.equals("1")))
result.append('0');
else
result.append('1');
}
else if (Operator.equals("NOR"))
{
if(BinaryA.equals("0") && (BinaryB.equals("0")))
result.append('1');
else
result.append('0');
}
else if (Operator.equals("XOR"))
{
if(BinaryA.equals("1") && BinaryB.equals("0") || (BinaryA.equals("0")) && BinaryB.equals("1"))
result.append('1');
else
result.append('0');
}
}
return result;
}
}
输出:
AND 和二进制数 10110101 和 00110001 导致输出 00000000
这行不通,BinaryA
和 BinaryB
是 String
,但您想比较单个 char
:
if (BinaryA.equals("1") && BinaryB.equals("1"))
相反,您应该逐个字符遍历,如下所示:
if (BinaryA.charAt(i) == '1' && BinaryB.charAt(i) == '1')
更改所有比较,以便它们对当前 i
索引指向的单个 char
进行操作。
你应该试试这个:
if(Operator.equals("AND"))
{
if(BinaryA.charAt(i)=='1'&& BinaryB.charAt(i)=='')
result.append('1');
else
result.append('0');
}
else if (Operator.equals("OR"))
{
if(BinaryA.charAt(i)=='0' && BinaryB.charAt(i)=='0')
result.append('0');
else
result.append('1');
}
我编写了一个程序,对两个二进制数执行某些运算(AND、OR、NOR、NAND、NOT、XOR)并 returns 结果。我使用 stringbuilder 来生成结果。该程序的方法使用 for 循环遍历 BinaryA 中的每个字符(因为它们的长度相同),然后使用基于真值 table 的算法来获得结果。
我遇到的唯一问题是结果一直输出 00000000 或 11111111。我不确定我的逻辑问题是什么:
public class Driver {
public static void main(String[] args) {
String Operator = "AND";
String binA = "10110101";
String binB = "00110001";
System.out.println(Operator + " and binary numbers " + binA + " and " + binB + " result in the output " + doOperation(Operator, binA, binB));
}
public static StringBuilder doOperation(String Operator, String BinaryA, String BinaryB)
{
StringBuilder result = new StringBuilder();
for(int i = 0; i < BinaryA.length(); i++)
{
if(Operator.equals("AND"))
{
if(BinaryA.equals("1") && BinaryB.equals("1"))
result.append('1');
else
result.append('0');
}
else if (Operator.equals("OR"))
{
if(BinaryA.equals("0") && BinaryB.equals("0"))
result.append('0');
else
result.append('1');
}
else if (Operator.equals("NAND"))
{
if(BinaryA.equals("1") && (BinaryB.equals("1")))
result.append('0');
else
result.append('1');
}
else if (Operator.equals("NOR"))
{
if(BinaryA.equals("0") && (BinaryB.equals("0")))
result.append('1');
else
result.append('0');
}
else if (Operator.equals("XOR"))
{
if(BinaryA.equals("1") && BinaryB.equals("0") || (BinaryA.equals("0")) && BinaryB.equals("1"))
result.append('1');
else
result.append('0');
}
}
return result;
}
}
输出: AND 和二进制数 10110101 和 00110001 导致输出 00000000
这行不通,BinaryA
和 BinaryB
是 String
,但您想比较单个 char
:
if (BinaryA.equals("1") && BinaryB.equals("1"))
相反,您应该逐个字符遍历,如下所示:
if (BinaryA.charAt(i) == '1' && BinaryB.charAt(i) == '1')
更改所有比较,以便它们对当前 i
索引指向的单个 char
进行操作。
你应该试试这个:
if(Operator.equals("AND"))
{
if(BinaryA.charAt(i)=='1'&& BinaryB.charAt(i)=='')
result.append('1');
else
result.append('0');
}
else if (Operator.equals("OR"))
{
if(BinaryA.charAt(i)=='0' && BinaryB.charAt(i)=='0')
result.append('0');
else
result.append('1');
}