当方法包含多个具有多个返回的 if 语句时,如何从方法中获取返回值?
Posted
技术标签:
【中文标题】当方法包含多个具有多个返回的 if 语句时,如何从方法中获取返回值?【英文标题】:How to get a return value from a method when the method contains multiple if statements with multiple returns? 【发布时间】:2013-11-09 14:45:15 【问题描述】:public static double changeToSpeed(String time, int distance)
if(time.indexOf(":") == 1)
int minutes = time.charAt(0);
String sec = time.substring(3, 7);
double seconds = Double.parseDouble(sec);
double totalTime = 60 * minutes + seconds;
double endSpeed = distance / totalTime;
return endSpeed;
else if(time.indexOf(":") == 2)
String min = time.substring(0, 2);
String sec = time.substring(3, 7);
double minutes = Double.parseDouble(min);
double seconds = Double.parseDouble(sec);
double totalTime = 60 * minutes + seconds;
double endSpeed = distance / totalTime;
return endSpeed;
else if(time.indexOf(":") == -1)
int minutes = 0;
double seconds = Double.parseDouble(time);
double totalTime = 60 * minutes + seconds;
double endSpeed = distance / totalTime;
return endSpeed;
我试图根据“:”在字符串时间中的位置获得不同的回报。这给了我一个在方法的主要部分没有返回值的问题,但是当我这样做时,它给了我一个不同的错误,说我有太多的返回语句。我需要帮助。
【问题讨论】:
【参考方案1】:目前的问题是,如果 time.indexOf(":")
没有返回 1、2 或 -1,您的方法不会返回任何内容。在那种情况下你想做什么?例如,您可能想要抛出异常。你应该弄清楚在那种情况下你想发生什么 - 然后你就可以弄清楚如何实现它。
我还建议从一个重构开始:这种方法的大部分与解析时间有关;然后你对距离和解析时间做同样的事情。所以将时间解析提取到一个单独的方法中:
public static double changeToSpeed(String time, int distance)
double totalTime = parseTime(time);
return distance / totalTime;
private static double parseTime(String time)
// Now you *only* have to deal with time in here
此外,这并没有达到您的预期:
int minutes = time.charAt(0);
... 例如,这将为 '1' 给出 49。当您使用Double.parseDouble
表示分钟:秒的分钟部分时,您真的 想要double
,还是真的想要int
?您是否真的希望 .5:20
之类的意思是 50 秒?
最后,请考虑您的“.:....”和“..:....”之间的唯一区别是您如何处理会议记录,真的。在这两种情况下,您都可以只解析一个整数:
int colon = time.indexOf(':');
// If we don't have a colon, just assuming it's minutes:seconds in some form
if (colon != -1)
int minutes = Integer.parseInt(time.substring(0, colon));
double seconds = Double.parseDouble(time.substring(colon + 1));
return minutes * 60 + seconds;
else
return Double.parseDouble(time);
现在假设您希望 100:30.5 成为有效时间。如果您真的只想要位置 1 或 2 的冒号,您应该检查:
if (colon == 1 || colon == 2)
int minutes = Integer.parseInt(time.substring(0, colon));
double seconds = Double.parseDouble(time.substring(colon + 1));
return minutes * 60 + seconds;
else if (colon == -1)
return Double.parseDouble(time);
else
throw new /* some appropriate exception type */
【讨论】:
感谢您的帮助!这确实有助于浓缩我的一些代码。我也在学校问过我的老师,他谈到了没有“else ”的问题,但这里的细节真的帮助了我。祝你有美好的一天d(^_^d)【参考方案2】:试试这个
public static double changeToSpeed(String time, int distance)
if(time.indexOf(":") == 1)
int minutes = time.charAt(0);
String sec = time.substring(3, 7);
double seconds = Double.parseDouble(sec);
double totalTime = 60 * minutes + seconds;
double endSpeed = distance / totalTime;
else if(time.indexOf(":") == 2)
String min = time.substring(0, 2);
String sec = time.substring(3, 7);
double minutes = Double.parseDouble(min);
double seconds = Double.parseDouble(sec);
double totalTime = 60 * minutes + seconds;
double endSpeed = distance / totalTime;
else if(time.indexOf(":") == -1)
int minutes = 0;
double seconds = Double.parseDouble(time);
double totalTime = 60 * minutes + seconds;
double endSpeed = distance / totalTime;
return endSpeed;
【讨论】:
你必须在顶部声明endSpeed,否则无法编译,不是指定语言...以上是关于当方法包含多个具有多个返回的 if 语句时,如何从方法中获取返回值?的主要内容,如果未能解决你的问题,请参考以下文章
当元素具有多个类时如何在 switch 语句中检查 className
从多个表中提取时 PHP while 循环和 if 语句问题
如何从Combiner/Reducer/Aggregator 函数返回具有多个字段的元组?