0
public double Convertir(double Number) {
    Number = nombre;
    while ((Number - 365) >= 0) {
        annee += 1;   //this calculates the number of years    
    }
    return annee;
    double nombreSemaine = Number - (annee * 365);
    while ((nombreSemaine - 7) >= 0) {
        semaine = semaine + 1;
    }//this calculates the number of weeks
    return semaine;
    double nombreJour = Number - (annee * 365) - (semaine * 7);
    nombreJour = jour;
    return jour;
}

このコードを使用して、ユーザーが書いた数字 (日数) を年数、週数、日数に変換しようとしています。たとえば、数値 365 は 1 年 0 週 0 日を返す必要があります。

4

7 に答える 7

5

return annee;anneeメソッド内のこの式の後にあるものは実行されないように返します。

Arrayおそらく、代わりにを返すことができます:

public double[] Convertir(double Number) {
    Number = nombre;
    double[] all = new double[3];
    while ((Number - 365) >= 0) {
        annee += 1;   //this calculates the number of years    
    }
    all[0] = annee;
    double nombreSemaine = Number - (annee * 365);
    while ((nombreSemaine - 7) >= 0) {
        semaine = semaine + 1;
    }//this calculates the number of weeks
    all[1] = semaine;
    double nombreJour = Number - (annee * 365) - (semaine * 7);
    nombreJour = jour;
    all[2] = jour;

    return all
}

または似たようなもの。ArrayListおそらくより良いでしょう...しかし、それは同じ一般的な概念です.

于 2013-03-12T14:20:16.923 に答える
5

以下のコードreturn annee;は実行されません。

3 つの値を返したいようです。double1 つの値 (この場合は a) のみを返すことができます。

解決策 1 (グローバル変数):

int annee, semaine, jour; //global variables

public void Convertir(int Number) { //I guess number should be an Int too, unless it's possible to pass 567.28 days...
    //Number = nombre; Useless since this is a parameter
    annee = (int)(Number/365);
    semaine = (int)((Number - annee * 365)/7);
    jour = Number - annee * 365 - semaine * 7;
}

解決策 2 (配列を返す):

public int[] Convertir(int Number) { //I guess number should be an Int too, unless it's possible to pass 567.28 days...
    //Number = nombre; Useless since this is a parameter
    int[] anneeSemaineJour = new int[3];
    anneeSemaineJour[0] = (int)(Number/365);
    anneeSemaineJour[1] = (int)((Number - anneeSemaineJour[0] * 365)/7);
    anneeSemaineJour[2] = Number - anneeSemaineJour[0] * 365 - anneeSemaineJour[1] * 7;

    return anneeSemaineJour;
}

次に、次のように使用します (解決策 2):

int[] resultat = convertir(822); // convertir(nombre) in your case I guess
System.out.println("Annee = " + resultat[0] + " Semaine = " + resultat[1] + " Jour = " + resultat[2]);
于 2013-03-12T14:21:08.757 に答える
4

問題は、ステートメントreturnの後にコード (別の を含む) があることです。ステートメントはその場所で関数を停止し、値を返しますreturnreturnそれ以降は到達できません。

于 2013-03-12T14:20:36.057 に答える
1

あなたのコードには多くの問題があります。

他の人が言ったことすべてに加えて(以下のすべてreturnが実行されません)、ループには注意する必要がありますwhile。それらは無限ループです。

while ((Number - 365) >= 0) {
        annee += 1;   //this calculates the number of years    
}

Number - 365 >= 0の中にいて、whileに追加1している場合、が引き続き満たされるanneeため、これはループを停止しません。Number - 365 >= 0

2番目のループでも同じです。

于 2013-03-12T14:28:08.050 に答える
0

「return」はメソッドを終了します。それらすべて(年、月、日)を返したい場合は、配列を使用できます。あなたのコードには一般的に多くの間違いがあり、同様の操作がnombre(またはあなたが持っていた場合はNumber)に対して複数回実行されました。私はコードを実行可能にしようとしました。

public double[] Convertir(double nombre) {
    double[] yearsWeeksAndDays = new double[3];
    double annee = 0;
    double semaine = 0;
    while (nombre >= 365) {
        annee += 1;   //this calculates the number of years
        nombre -= 365;    
    }
    yearsWeeksAndDays[0] = annee;
    while (nombre >= 7) {
        semaine = semaine + 1;
        nombre -= 7;
    }//this calculates the number of weeks
    yearsWeeksAndDays[1] = semaine;
    yearsWeeksAndDays[2] = nombre;
    return yearsWeeksAndDays;
}
于 2013-03-12T14:27:38.707 に答える
0

3 つの戻り値を a にラップして、classそれを返す必要があります。このようなものはうまくいくはずです:

public static void main(String[] args) {
    System.out.println(convertir(365));
    System.out.println(convertir(366.5));
    System.out.println(convertir(456));

}

static class Duration {

    int years;
    int weeks;
    double days;

    @Override
    public String toString() {
        return years + " years, " + weeks + " weeks and " + days + " days.";
    }
}

public static Duration convertir(double total) {
    final Duration duration = new Duration();
    duration.years = (int) (total / 365);
    total = total % 365;
    duration.weeks = (int) (total / 7);
    total = total % 7;
    duration.days = total;
    return duration;
}

出力:

1 years, 0 weeks and 0.0 days.
1 years, 0 weeks and 1.5 days.
1 years, 13 weeks and 0.0 days.

明らかに少し翻訳が必要ですが、フランス語は私の得意分野ではありません。

于 2013-03-12T14:29:23.977 に答える
-1

コントロールがそのreturnステートメントに到達すると、それが返され、それ以上コードが実行されないことをコンパイラーが知っているため、到達不能なコードをスローします。これを解決するには、私が持っているようにreturnステートメントを条件ブロックに入れます以下に示されていますが、このプログラムはあなたが望む結果を返しません。年のみが返されます。結果全体が必要な場合。年数 + 週数 + 日数 1 つの文字列に対して全体の回答を作成して返すことをお勧めします。

public double Convertir(double Number) {
        // Number = nombre;
        double annee = 0;
        double semaine = 0;
        double jour = 0;
        while ((Number - 365) >= 0) {
            annee += 1; // this calculates the number of years
        }
        if (annee > 0) {
            return annee;
        }
        double nombreSemaine = Number - (annee * 365);
        while ((nombreSemaine - 7) >= 0) {
            semaine = semaine + 1;
        }// this calculates the number of weeks
        if (semaine > 0)
            return semaine;

        double nombreJour = Number - (annee * 365) - (semaine * 7);
        nombreJour = jour;
        return jour;
    }
于 2013-03-12T14:33:42.920 に答える