1

変数を別のメソッドに渡す方法を理解しており、複数の変数を単一のメソッドに渡す方法も学びました。私の問題は、スイッチステートメントを作成しようとしていることです。ユーザーがステートメントにジゴキシン(心臓の薬)の症状を入力すると、10ポイントを変数に保存し、ユーザーが別の症状を入力すると、私が望む別の症状を入力しますそれを変数にも新しいメソッドにも格納します。私の問題は、変数をメソッドに送信してプログラムを続行すると、必然的に変数がゼロにリセットされ、努力が無駄になることです。

コード:

    switch(input5) {
    case "Vomiting":
        score = 0;
        num = 0;
        score = num + 10;
        getMethod(score,0);
        System.out.println(getMethod(num));
        JOptionPane.showMessageDialog (null,"you're correct")  ;
        break;
    case "Dizziness":
        JOptionPane.showMessageDialog (null,"you're correct")  ;
        score = num + 10;
        getMethod(0,score);
        break;
    case "Confusion":
        JOptionPane.showMessageDialog (null,"you're correct");
        break;
    case "Vision":
        JOptionPane.showMessageDialog (null,"you're correct");
        break;
    default :
        JOptionPane.showMessageDialog (null,"you're Wrong");
        break;
    }
...
static int getMethod(int total) {
    int amount = total;
    int amount2 = total2;
    int result = amount + amount2;
    return result;
}
4

4 に答える 4

2

この質問の問題点は、言い回しが下手すぎて、実際に何が起こっていると考えているのかを理解するのが難しいことです。それが分からないと、きちんと答えることは難しいです。そこで、あなたの考えに誤りがあると思われる点をいくつか指摘します。

  • Java では、変数は「リセット」されません。この場合、問題はgetMethodメソッドが更新されないことscoreです。

  • メソッドが値を返し、その値が何かに割り当てられていない場合、その値は破棄されます。あなたの場合、getMethod呼び出している場所で返された値を割り当てていません。

  • Java では、引数は「値渡し」でメソッドに渡されます。結果として、次のようなものは機能しません。

    int test = 1;
    increment(test, 2);
    
    public void increment(int value, int by) {
        // FAIL - the local copy of "value" is incremented, but the
        // the original "test" variable is not touched.
        value = value + by;
    }
    

    これは変数の名前とは関係がないことに注意してください。問題は、メソッド内の変数が呼び出しサイトで使用される変数に「接続」されていないことです。このメソッドは前者を更新します ... 後者ではありません。


あなたのコードについて言う必要があるいくつかのこと:

  • コードを一貫してインデントすることが重要です。何をすべきかを説明するスタイルガイドがあります。(ほとんどのスタイル ガイドラインで受け入れられるように、コードを再インデントしました。)

  • メソッド、変数、クラスなどには、意味のある有益な名前を使用することが重要です。これは、コードの作成者がコードで意図したこと/意味することを読者が理解するのに役立ちます。あなたの場合、「getMethod」は、メソッドが何をすべきかについて読者に何も伝えません。

  • メソッドには、メソッドが何をすべきか、引数と結果の意味などを示す javadoc コメントも必要です。

于 2012-06-16T02:04:02.117 に答える
0

ここでの問題は、何かを入力して switch ステートメントを入力するたびに、スコアが 0 にリセットされることだと思います。

switch(input5){
             case "Vomiting":
             score = 0;

嘔吐するたびにスコアをリセットするのではなく、最初の入力の前にスコアを0に設定する必要があると思います。あなたのコードを正確にたどることができません。完全なクラスをリンクしてください。

于 2012-06-15T23:44:28.733 に答える
0

これを試して:

score = getMethod(score, 0);

Java では、プリミティブは「値渡し」です。variableではなくvalueがメソッドに渡されます。メソッド内で値を変更しても、メソッドの呼び出しに使用された変数には影響しません。

于 2012-06-15T23:44:31.403 に答える
0

スコアを維持または永続化するための静的グローバル変数を作成します。これにより、その後メソッドを呼び出しても、正確なスコアを追跡できます。

そこで、グローバル変数を作成しますpublic static int score = 0;score = 0;メソッド内では、グローバル スコア変数を使用するため、スコア変数のゼロへの初期化を取り除くことができます。

于 2012-06-16T00:11:47.047 に答える