2016-12-28 119 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。這意味着,準確性應該是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 - 哎呀!

+1

可能是[是Java的「傳遞引用」還是「傳值」?)(http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or - 通過值) – SomeJavaGuy

+0

這個問題很可能是愚蠢的,我倒像你使用它,因爲它會通過引用'int',在這種情況下,'成功',但你需要存儲它成爲'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"); 
} 

目前你的代碼是放棄返回值,因爲它沒有分配給任何東西。