Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试表示位序列的两个字符串的字符_Java_String_Methods - Fatal编程技术网

Java 测试表示位序列的两个字符串的字符

Java 测试表示位序列的两个字符串的字符,java,string,methods,Java,String,Methods,我试图比较两个比特链,如果其中一个比特是“开”的,则返回V表示真,返回F表示假,但它似乎不起作用 如果我输入1000和0000,它会产生vf,这是正确的,但是如果我输入1000和0001,它会返回vv,我似乎不知道为什么 我哪里出错了 public static String ou (String s1, String s2) { String chaineOU = ""; char verifS1 = 0; char verifS

我试图比较两个比特链,如果其中一个比特是“开”的,则返回V表示真,返回F表示假,但它似乎不起作用

如果我输入1000和0000,它会产生
vf
,这是正确的,但是如果我输入1000和0001,它会返回
vv
,我似乎不知道为什么

我哪里出错了

    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; 
        }
    }
公共静态字符串ou(字符串s1、字符串s2){
字符串chaineout=“”;
char verifS1=0;
char-verifS2=0;
对于(int i=0;i
您的内部循环毫无意义。它使您仅检查s2的最后一个字符与s1的所有字符

此外,您的返回声明似乎位于错误的位置。它应该在循环之后

只需去掉内部循环并移动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; 
for(int i=0;i

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

看起来您希望执行“位”中的“或”(读取代码,并考虑“chaineout”在法语中的意思是“或chain”),在这种情况下,您需要比较相同的位,所以你想要一个循环而不是两个

您还存在从循环内返回的问题

试试这个:

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; 
}
公共静态字符串ou(字符串s1、字符串s2){
字符串chaineout=“”;
char verifS1=0;
char-verifS2=0;
对于(int i=0;i
你的测试用例成功了,这是一个不幸的巧合


另一方面,此代码可以更简洁地改写为:

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; 
}
公共静态字符串ou(字符串s1、字符串s2){
字符串chaineout=“”;
对于(int i=0;i96?'V':'F`;
返回链接EOU;
}

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

  • 不需要引用字符;它只需要比较,因此删除
    char
    变量
  • 将使用if-else向结果中添加一个字符,而if-else可以更优雅地用三元数表示
  • char
    是一种数字类型,可以进行算术添加,字符
    '0'
    是十进制
    48
    ,因此
    '0'+'0'
    96
    。从逻辑上讲,如果任何一个字符是
    '1'
    ,那么字符的总和将超过
    96
    ,从而对
    '1'

为什么要循环以获得
verifS2
?您当前只使用了
s2
中的最后一个字符。我应该写什么,以便它逐个检查所有字符,而不是只使用最后一个?例如,我希望将第一个字符与第一个、第二个到第二个等进行比较。不确定
n
来自何处,但我相信您的意思是
I
。谢谢!你花了几个小时试图解决这个问题,而你只花了30秒就解决了!