我正在研究一种java方法,该方法检查字符数组中的字符是否被字符包围。例如:abcdc,d被c包围。例如:abccc,没有被包围的字母。这是我到目前为止所拥有的。
public static boolean surroundedCharacter(char[] letters){
boolean result = false;
for(char letter : letters)
if(letters[letter-1] == letters[letter+1]){
result = true;
}
return result;
} }
所以我基本上每个循环都有一个字母,并检查位置前的字母是否等于字母后面的字母。如果是,则表示该字母已被包围,并且应将结果更改为true。 junit测试说if语句错了,但我不知道如何修复它。任何帮助表示赞赏。
答案 0 :(得分:1)
试试这个:
public static boolean surroundedCharacter(char[] letters){
boolean result = false;
for( int i=1;i<letters.length-1;i++)
if(letters[i-1] == letters[i+1]){
result = true;
}
}
return result;}
答案 1 :(得分:1)
您必须使用整数作为索引:
public static boolean surroundedCharacter(char[] letters){
boolean result = false;
for(int i = 1; i < letters.length - 1; i++) {
// You said that if the string is "abccc", should return false.
// So, we check if the previous or the next letter is different to
//the actual value of i
if((letters[i-1] == letters[i+1]) && (letters[i-1] != letters[i])) {
result = true;
}
}
return result;
}
答案 2 :(得分:0)
你必须使用for循环而不是short。试试这个循环:
for(int i = 1; i< letters.length-1; i++){
if(letters[i-1] == letters[i+1]){
result = true;
}
}
答案 3 :(得分:0)
Java foreach旨在迭代元素之后的元素
如果需要在每次迭代时获得两个不同的元素,则应使用经典来使用int值。
此外,您不需要拥有中间变量。条件匹配时,您可以返回true。否则在循环后返回false。
最后,根据您的需要:
Ex:abccc,没有被包围的字母。
只有当包围的字符与其周围的字符不同时,才应接受匹配。
public static boolean surroundedCharacter(char[] letters){
for(int i=1; i<letters.length-1; i++){
var beforeLetter = letters[i-1];
var afterLetter = letters[i+1];
if(beforeLetter == afterLetter && beforeLetter != letters[i]){
return true;
}
}
return false;
}