我試圖讓下面的程序工作:如何從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
。這意味着,準確性應該是100%,而打印出來的語句應該讀We can say that the number 3 indeed equals 3 with 100% accuracy
正在發生的事情:end語句當前打印We can say that the number 3 indeed equals 3 with 0% accuracy
這顯然是不正確的 - success
沒有被傳遞迴,因此,被計算精度爲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 - 通過值) – SomeJavaGuy
這個問題很可能是愚蠢的,我倒像你使用它,因爲它會通過引用'int',在這種情況下,'成功',但你需要存儲它成爲'success = returnTen(...)'的地方' – SomeJavaGuy
您的編輯應該可能是一個新問題,因爲它可能會識別來自不同問題的症狀。 –