缺少return语句的错误。任何人都知道代码有什么问题吗?
import java.text.*;
public class Sentence {
private String text;
public Sentence(String str) {
str = text;
}
public boolean isPalindrome() {
int length = text.length();
for(int n = 0;n <= length/2;n++) {
char letterFromFront = text.charAt(n);
char letterFromBack = text.charAt(length);
if(letterFromFront == letterFromBack) {
return true;
}else {
return false;
}
}
}
}
答案 0 :(得分:3)
它的抱怨是因为如果它没有进入for
循环就没有任何回报。
请在return
循环后添加for
语句。
另请注意:n++
循环中的for
是死代码,因为您在第一次迭代中返回。
答案 1 :(得分:1)
任何人都知道代码有什么问题吗?
正是它所说的。
这样说:如果字符串为空,您认为会返回什么? (事实上,它会抛出一个异常,因为你可能希望你的上限是独占的而不是包容性的,但从根本上你需要考虑它永远不会进入循环体的情况。)
此代码还有其他问题,请注意:
text.charAt(length)
将抛出异常,总是true
...)答案 2 :(得分:1)
例如,如果length
为-2
(事实上不可能发生),您的循环将永远不会运行,您将不会返回任何内容。
你需要在循环之后添加一个return语句来满足编译器,或者在你的循环之前更好,检查长度是否为>1
并且如果不是则返回true / false。
您的代码中还有其他问题,但这是编译器错误的原因。
答案 3 :(得分:1)
当n不小于或等于length/2
时,您的代码不会考虑这种情况。
我认为,如果不是回文意味着无论发生什么,你都想要返回假。
public class Sentence {
private String text;
public Sentence(String str) {
str = text;
}
public boolean isPalindrome() {
boolean value = false;
int length = text.length();
for(int n = 0;n <= length/2;n++) {
char letterFromFront = text.charAt(n);
char letterFromBack = text.charAt(length);
if(letterFromFront == letterFromBack) {
value = true;
}else {
value = false;
}
}
return value;
}
}
答案 4 :(得分:1)
实际上return false
应放在循环之后,否则它总是运行一次
public boolean isPalindrome() {
int length = text.length();
for(int n = 0;n <= length/2;n++) {
char letterFromFront = text.charAt(n);
char letterFromBack = text.charAt(length);
if(letterFromFront == letterFromBack) {
return true;
}
}
return false;
}
答案 5 :(得分:0)
从else子句中删除return statment并在循环结束前移动。因此,如果number是回文,则它落入if子句并返回true,否则返回false。 理论上你的代码是正确的,但编译器不会这样看。