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;
    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;
  }
}

「:」が文字列時間のどこにあるかに基づいて、さまざまな戻り値を取得しようとしています。これにより、メソッドの主要部分に戻り値がないという問題が発生しますが、そうすると、return ステートメントが多すぎるという別のエラーが表示されます。私は助けが必要です。

4

2 に答える 2

6

現時点での問題は、メソッドがtime.indexOf(":")1、2、または -1 を返さない場合、何も返さないことです。その状況で何をしたいですか?たとえば、例外をスローしたい場合があります。その状況で何をしたいのかを考え出す必要があります - そして、それをどのように実装するかを考え出すことができます。

また、最初に 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:2050秒を意味するようなものを期待していますか?

最後に、".:...." と "..:...." の唯一の違いは、議事録の扱い方だけであると考えてください。どちらの場合も、整数を解析できます。

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 */
}
于 2013-10-30T06:49:40.697 に答える
1

これを試して

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;
}
于 2013-10-30T06:28:15.030 に答える