2012-05-31 28 views
5

我試圖解決下面的Java代碼,Java的失誤與數字

我想不通爲什麼打印輸出仍然是5

public class simpleMath 
{ 
    public static void main(String[] args) 
    { 
     int number=5; 
     half(number); 

     System.out.println("5 divided by 2 is: " + number); 

    } 

    private static double half(int number) { 
     number = number/2; 
     return number; 
    } 
} 
+0

你打電話給你的劃分方法,但你不結果,從它分配。嘗試System.out.println(「5除以2是:」+ half(number));但當然 - 最好是使用變量來保存操作的結果。 – hovanessyan

回答

-5

首先您需要知道您分配給變量的類型。你應該改變你的代碼,看起來像這樣:

public class simpleMath 
    { 


     public static void main(String[] args) 
     { 
      double number = 5; 
      double answer = half(number); 

      System.out.println(" 5 divided by 2 is:"+ answer); 

     } 

     private static double half(double number) { 
      number = number/2.0; 
      return number; 
     } 

    } 

看看我現在如何使用返回的值,以及如何除以2.0?這些變化會給你你正在尋找的結果。

+0

爲什麼所有的downvotes?我給出了一個很好的答案,我知道作品 – jth41

+2

所有的downvotes,因爲你不*解決OP的問題,你只需隱藏它。他沒有分配「半數」的返回值,你的解決方案是在打印時再次調用它?這不會以任何方式幫助OP。 –

+0

哇完全錯過了。我只是跑了它,並認爲它是正確的。謝謝你讓我知道 – jth41

9

當你調用該函數,你拋棄了返回值:

half(number); 

你大概意思寫:

number = half(number); 

另外,在Java中,參數是按值傳遞的。這意味着,即使您在該函數內更改了number,該更改也不會傳播回調用方。

有幾種另外的問題:

問題1:所建議的變化將結果存儲在number,它是一個整數變量。因此,half()的結果 - double - 將被截斷爲整數。爲避免精度損失,您必須將number更改爲浮點變量,或將結果存儲在適當類型的其他變量中。

問題2:下面使用整數除法

number = number/2; 

的結果被截斷的整數,即5/22。後者然後轉換爲double(2.0),這是函數返回的結果。

要修復,改變功能,像這樣:

private static double half(int number) { 
    return number/2.0; 
} 

附:浮點數有很多可能不直觀的屬性。我建議看看What Every Computer Scientist Should Know About Floating-Point Arithmetic

+2

是真的,但並沒有真正回答這個問題,雖然它是;;) – Nim

+0

不,我回來的號碼是5 – Yui2

17

因爲您沒有重新分配返回的值。

int number = 5; 
number = half(number); 
0

這是因爲你不分配的half()number返回值 - 它被計算,但沒有使用。

你必須說:如果number正被引用傳遞,而不是值

number = half(number); 

你有它目前的方式只會工作。

1

您傳遞由值完成的原始數據類型。你需要在方法的一半給予SOP() 編輯:需要使用方法half()返回的結果,方法是將其分配給數字或在SOP本身中調用此方法。

+0

但他正在返回新的價值... –

+1

他返回它,但他沒有再次分配給'號碼'變量 –

1

爲什麼half(number)不修改number申報main()函數?這是因爲您會將number的值傳遞給half()函數以進行評估,即您將number中的值的副本提供給half()函數。因此,不管half()函數做到number都不會反映回number變量宣稱爲main()。如果要更新其值,則需要將的返回值分配給number,並將其返回main()

還有其他一些情況,比如可變陰影,我不會詳細討論,因爲它可能會讓你感到困惑。

0
int number =5; 
half(number); 

Java不支持通過引用。所以在這種情況下,我們傳遞的值是5而不是數字的引用。

因此,如果我們想捕捉的變化則方法調用應該是這樣的 -

public class simpleMath 
{ 
    public static void main(String[] args) 
    { 
     int number =5; 
     number = half(number); 

     System.out.println(" 5 divided by 2 is:"+ number); 

    } 

    private static double half(int number) { 
     number = number/2; 
     return number; 
    } 
}