连接字符数组时意外的 \u0000 插入了“0”

问题描述

我在 leetcode 得到了意想不到的 \u0000:

enter image description here

同样的代码在 linqpad 本地工作正常:

public string AddBinary(string a,string b)
{
    var result = a.Length > b.Length
        ? new char[a.Length]
        : new char[b.Length];

    result.Dump();

    bool carry = false;
    
    var iA = a.Length - 1;
    var iB = b.Length - 1;

    while (!(iA < 0 && iB < 0))
    {
        var bA = iA < 0 ? false : a[iA] == '1';
        var bB = iB < 0 ? false : b[iB] == '1';

        //char cA = iA < 0 ? '-' : a[iA];
        //char cB = iB < 0 ? '-' : b[iB];
        //$"string a. i = {iA} cA = '{cA}' {bA}".Dump();
        //$"string b. i = {iB} cB = '{cB}' {bB}".Dump();
        
        bool bCurrent = bA ^ bB ^ carry;

        int position = iA < 0 ? iB : iA;
        
        result[position] = bCurrent ? '1' : '0';
        
        carry = carry 
                ? !(!bA && !bB)
                : bA && bB;
        
        iA--;
        iB--;
    }
    
    result.Dump();

    if(!carry)
        return new string(result);
        
    var newResult = new char[result.Length + 1];
    newResult[0] = '1';
    for (int i = 0; i < result.Length; i++)
    {
        newResult[i+1] = result[i];
        result[i].Dump();
    }
    result.Dump();
    var ab = new string(newResult);
    displayString(ab);
    ab.Dump();
    return ab;

    //var one = new char[] { '1' };
    //result.Dump();
    //var newResult = one.Concat(result);
    //newResult.Dump();
    //var r = new string(newResult.ToArray());
    //r.Dump();
    //return r;
}

(参见 John's Skeet page 处的 displayString 定义)

以下是此测试用例中的一些调试信息:

enter image description here

第二个版本有同样的错误

enter image description here

所以,\u0000 没有来自哪里。这是一个错误吗?或者我错过了什么?

解决方法

错误在于位置的计算:

int position = iA >= iB ? iA : iB;

您需要使用最大位置。

如您所写,使用 1111,在第一个循环中您有:iA == 0iB == 2position == 0 而不是 {{1} } (所以你写的是第一个元素而不是最后一个)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...