Java 测试表示位序列的两个字符串的字符
我试图比较两个比特链,如果其中一个比特是“开”的,则返回V表示真,返回F表示假,但它似乎不起作用 如果我输入1000和0000,它会产生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
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秒就解决了!