当方法包含多个具有多个返回的 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 语句问题

使用JPA在Sql中具有不同值的多个语句where子句

如何从Combiner/Reducer/Aggregator 函数返回具有多个字段的元组?

SQL - 使用具有多个 IS NULL、IS NOT NULL 的 CASE 语句

从C中的函数返回具有多个可变长度数组的结构