2016-12-28 18 views
1

私は、次のプログラムが動作するように取得しようとしています:このプログラムではJava関数から値を返すにはどうすればよいですか?

public class funWithNumbers { 
public static void main (String[] args) { 
    int ten = 10; 
    int subend = 7; 
    int result = ten - subend; 
    int success = 0; 
    int trials = 750; 
    for (int i=0; i<trials; i++) { 
     double randomNumber = Math.random(); 
     randomNumber = randomNumber * 200; 
     randomNumber++; 
     int randNum = (int) randomNumber; 
     int mystery = randNum; 
     returnTen(mystery, subend, result, success); 
    } 
    int accuracy = (success/trials) * 100; 
    System.out.println("Trials Run: " + trials); 
    System.out.println("We can say that the number " + result + " indeed equals " + result + " with " + accuracy + "% accuracy."); 
} 
public static int returnTen(int mystery, int subend, int result, int success) { 
    int original = mystery; 
    mystery = mystery + mystery; 
    mystery = mystery * 5; 
    mystery = mystery/original; 
    mystery = mystery - subend; 
    if (mystery == result) { 
     success++; 
    } 
    return success; 
} 
} 

すべてはその最後の文(return success)を除いて動作します。何らかの理由で、returnTen関数の値をメインプログラムに戻すことはできません。私は道に沿ってSystem.out.println()ステートメント(上記には含まれていません)を使用してプログラムをデバッグしようとしましたが、returnTen関数内では、success変数が正常にインクリメントされました。しかし、私はそれを主な機能に戻すことはできません。

何が起こるべきか:この機能は、基本的には一般的な数字のトリックです。 mysteryの最終結果は3でなければなりません(これは結果です)。したがって、successは、関数が実行されるたびに常にインクリメントされます。 - successが戻されていないため、精度が計算されているエンド・ステートメントが現在明らかに真実ではないとするWe can say that the number 3 indeed equals 3 with 0% accuracyを出力します。これは精度が100%であるべきであり、何が起こっているWe can say that the number 3 indeed equals 3 with 100% accuracy

プリントアウト文が読まなければならないことを意味します0%である。

編集:returnTen(mystery, subend, result, success);からsuccess = returnTen(mystery, subend, result, success);に変更すると、終了ステートメントが0%から25000%に変更されます。 更新:問題を修正しました。success =を追加する必要があり、変更する必要がありました。success/resultsuccess/trialsに変更しました。

+1

[Javaが「参照渡し」または「渡し渡し」ですか?](http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or) -pass-by-value) – SomeJavaGuy

+0

この疑問はまあまあであるかもしれませんが、 'int'(この場合は' success')への参照を渡すので、あなたが使っているように落ちましたが、 'success = returnTen(...) 'のように – SomeJavaGuy

+0

あなたの編集はおそらく別の問題の症状を識別するため、新しい質問になるはずです。 –

答えて

3

あなたのreturnTen()関数は値を返していますが、あなたのコードはその値を使用していません。戻り値を使用するには、行:

returnTen(mystery, subend, result, success); 

は次のようになります。

success = returnTen(mystery, subend, result, success); 
3

問題はそのreturn success;ではありませんが、それはあなたが使用していないていることだし、(それは)動作していません戻り値はです。関数を呼び出すとき、あなたは使用に戻り値を必要とする:

リターンを利用するための関数から値を使用して、変数に割り当てたり、テスト条件として、それを使用しなければならないで
success = returnTen(mystery, subend, result, success); 
// ^^^^^^^^^^ 
-1

それは何にも割り当てられていないので、など

if(returnTen(mystery, subend, result, success) > 0){ 
    System.out.println("returnTen returned an int value"); 
} 

現在、あなたのコードは、戻り値を破棄しています。

関連する問題