2016-12-28 87 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"); 
} 

目前你的代码是放弃返回值,因为它没有分配给任何东西。