测试表示一系列位的两个字符串的字符

时间:2014-11-04 20:33:20

标签: java string methods

我正在尝试比较两个位串并返回V表示TRUE而F表示False,如果其中任何一个位“打开”,但它似乎不起作用。

如果我输入1000和0000,它会产生V F F F,这是正确的,但如果我输入1000和0001,它会返回V V V V,我似乎无法找出原因。

我哪里出错?

    public static String ou (String s1, String s2) {    
        String chaineOU = "";
        char verifS1 = 0;
        char verifS2 = 0;           

        for (int i = 0; i < s1.length(); i++){
            verifS1 = s1.charAt(i);
            for (int n = 0; n < s2.length(); n++){
                verifS2 = s2.charAt(n);
            }

            if (verifS1 == '1' || verifS2 == '1'){
                chaineOU = chaineOU + 'V';
            } else {
                chaineOU = chaineOU + 'F';

            }
            return chaineOU; 
        }
    }

2 个答案:

答案 0 :(得分:1)

你的内循环毫无意义。它会导致您只针对s1的所有字符检查s2的最后一个字符。

此外,您的return语句似乎位于错误的位置。它应该在循环之后。

摆脱内部循环并移动return语句:

    for (int i = 0; i < s1.length(); i++){
        verifS1 = s1.charAt(i);
        verifS2 = s2.charAt(i);

        if (verifS1 == '1' || verifS2 == '1'){
            chaineOU = chaineOU + 'V';
        }else{
            chaineOu = chaineOU + 'F';
        }
    }
    return chaineOU; 

此代码假定s1s2具有相同的长度。如果它们可能有不同的长度,您应该决定在这种情况下输出应该是什么,并更改代码以反映它。

答案 1 :(得分:1)

看起来你想要执行“位”的“OR”(读取代码,并考虑“chaineOU”在法语中意为“OR链”),在这种情况下你需要比较相同位,所以你想要一个循环而不是两个。

您还有从循环中返回的问题。

试试这个:

public static String ou (String s1, String s2){

    String chaineOU = "";
    char verifS1 = 0;
    char verifS2 = 0;

    for (int i = 0; i < s1.length(); i++){
        verifS1 = s1.charAt(i);
        verifS2 = s2.charAt(i);

        if (verifS1 == '1' || verifS2 == '1'){
            chaineOU = chaineOU + 'V';
        }else{
            chaineOU = chaineOU + 'F';
        }
    }
    return chaineOU; 
}

你的测试用例是一个不幸的巧合。


顺便说一下,这段代码可以更简洁地重写为:

public static String ou (String s1, String s2){
    String chaineOU = "";
    for (int i = 0; i < s1.length(); i++)
        chaineOU += s1.charAt(i) + s2.charAt(i) > 96 ? 'V' : 'F`;
    return chaineOU; 
}

请参阅live demo

这种简化来自以下观察结果:

  • 不需要对该字符的引用;它只需要进行比较,因此请删除char变量
  • 使用if-else将一个字符添加到结果中,使用三元组可以更优雅地表达
  • char数字类型,可以是算术添加,字符'0'是十进制48,所以'0' + '0'96。从逻辑上讲,如果任一字符为'1',则字符总和将超过96,从而导致对任一字符'1'
  • 进行更简洁的测试