私は、次のプログラムが動作するように取得しようとしています:このプログラムでは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/result
をsuccess/trials
に変更しました。
[Javaが「参照渡し」または「渡し渡し」ですか?](http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or) -pass-by-value) – SomeJavaGuy
この疑問はまあまあであるかもしれませんが、 'int'(この場合は' success')への参照を渡すので、あなたが使っているように落ちましたが、 'success = returnTen(...) 'のように – SomeJavaGuy
あなたの編集はおそらく別の問題の症状を識別するため、新しい質問になるはずです。 –