【问题标题】:Issue with Program that builds strings构建字符串的程序的问题
【发布时间】:2015-02-07 20:54:39
【问题描述】:

我编写了一个程序,对两个二进制数执行某些操作(AND、OR、NOR、NAND、NOT、XOR)并返回结果。我使用了一个字符串生成器来生成结果。该程序的方法使用 for 循环来查看 BinaryA 中的每个字符(因为它们都具有相同的长度),然后使用基于真值表的算法来获得结果。

我遇到的唯一问题是结果一直输出 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

【问题讨论】:

  • 将它们解析为数字会更高效且不易出错。

标签: java logic stringbuilder


【解决方案1】:

这行不通,BinaryABinaryBStrings,但你想比较单个 chars:

if (BinaryA.equals("1") && BinaryB.equals("1"))

相反,您应该进行逐个字符的遍历,如下所示:

if (BinaryA.charAt(i) == '1' && BinaryB.charAt(i) == '1')

更改所有比较,以便它们在当前 i 索引指向的单个 char 上运行。

【讨论】:

  • 完美!!!!我犯了一个如此愚蠢的错误,但我想它发生在我们最好的人身上。
【解决方案2】:

你应该试试这个:

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');

    }

【讨论】:

  • 你是对的,但我认为是 1 而不是 0,无论如何。欢迎你@c0der!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
相关资源
最近更新 更多