2011-01-28 71 views
0
import java.lang.Math; 
class Squr 
{ 
    public static void main() 
    {   
     Squr square = new Squr(); 
     System.out.println ("square root of 10 : " + square.mysqrt(10)); 
     System.out.println (" Square root of 10.4 : "+ square.mysqrt(10.4));   
    } 

    int mysqrt (int x) 
    { 
     return Math.sqrt(x); 
    } 

    double mysqrt (double y) 
    { 
     return Math.sqrt(y); 
    } 
} 

超載當我們編譯它,然後它給錯誤方法的Java

possible loss of precision 
found :double 
required :int 

我寫了這個程序的方法重載的概念計算的intdouble類型值平方根。

如何修復我的錯誤,以便我可以找到intdouble的平方根?

+0

這裏有什麼問題? – 2011-01-28 09:20:31

+0

問題是我試圖找出int的平方根以及double類型值... – 2011-01-28 09:23:12

回答

0

http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#sqrt%28double%29

返回雙倍。在int中鑄造會失去精度。你不這麼認爲嗎?

JLS對轉換有話要說。看到這個http://java.sun.com/docs/books/jls/third_edition/html/conversions.html

下22點特定的原始類型的轉換被稱爲基本收縮轉換:

* short to byte or char 
* char to byte or short 
* int to byte, short, or char 
* long to byte, short, char, or int 
* float to byte, short, char, int, or long 
* double to byte, short, char, int, long, or float 

縮小轉換可能會失去約數值的總幅度信息,並且還可能會丟失精度。

4

我不認爲這與方法重載有關 - 它實際上很簡單。

Math.sqrt()返回double,但在您的第一個類方法中,您試圖直接從返回int的方法返回此值。這將是一個有損轉換,你需要手動執行它。

特別是 - 當您撥打mysqrt(5)時,您希望得到的答案是哪個整數? 23?有些「警告,而不是整數」值如-1?我懷疑這可能是你的意思返回double這兩種方法,只有參數的類型不同。

+0

+1準確,解釋清楚的答案。 – Mikaveli 2011-01-28 09:35:43

2

我的日食給:

類型不匹配:不能從雙轉換爲int

不管消息是,您可以通過解決這個問題:return (int) Math.sqrt(x);

這有什麼好做超載。

順便說一下,整數的平方根可以是double,所以通過返回類型int可以截斷可能重要的信息。

因此,我建議只使用Math.sqrt(..)而不作任何其他方法。如果您需要整個零件,可以使用Math.floor(..)Math.round(..)