San*_*y B 2 java compiler-errors return
public static String produceAnswer(String y) {
int space1Location = y.indexOf(" ");
String value1 = y.substring(0, space1Location - 1);
String value2 = y.substring(space1Location + 3);
String operator = y.substring(space1Location + 1, space1Location + 2);
int underLocation = value2.indexOf("_");
int slashLocation = value2.indexOf("/");
String wholeNum;
String numerator;
String denominator;
if(underLocation != -1) {
wholeNum = value2.substring(0, underLocation);
numerator = value2.substring(underLocation + 1, slashLocation);
denominator = value2.substring(slashLocation + 1);
}
else if(underLocation == -1 && slashLocation != -1) {
numerator = value2.substring(0, slashLocation);
denominator = value2.substring(slashLocation + 1);
wholeNum = "0";
}
else if(underLocation == -1 && slashLocation == -1) {
wholeNum = value2;
numerator = "0";
denominator = "1";
}
return "whole:" + wholeNum + " numerator:" + numerator + " denominator:" + denominator;
}
Run Code Online (Sandbox Code Playgroud)
我的代码中的return语句由于某种原因不起作用.它说变量还没有被初始化,这对我来说没有意义,因为我肯定在if语句中初始化它们吧?这有什么不对?
当你编写一个if-else-if...没有final 的语句时else,编译器不知道是否保证其中一个条件true,这意味着它不确定你的局部变量是否会被初始化.
你应该把最后一个else if改为else.
if(underLocation != -1) {
wholeNum = value2.substring(0, underLocation);
numerator = value2.substring(underLocation + 1, slashLocation);
denominator = value2.substring(slashLocation + 1);
} else if (underLocation == -1 && slashLocation != -1) {
numerator = value2.substring(0, slashLocation);
denominator = value2.substring(slashLocation + 1);
wholeNum = "0";
} else {
wholeNum = value2;
numerator = "0";
denominator = "1";
}
Run Code Online (Sandbox Code Playgroud)
甚至:
if (underLocation != -1) {
wholeNum = value2.substring(0, underLocation);
numerator = value2.substring(underLocation + 1, slashLocation);
denominator = value2.substring(slashLocation + 1);
} else if (slashLocation != -1) {
numerator = value2.substring(0, slashLocation);
denominator = value2.substring(slashLocation + 1);
wholeNum = "0";
} else {
wholeNum = value2;
numerator = "0";
denominator = "1";
}
Run Code Online (Sandbox Code Playgroud)
因为如果第一个条件是false,我们已经知道underLocation保证-1处于第二个条件,所以测试它就足够了slashLocation != -1.