2012-03-09 181 views
0

下面的代碼在C#中:相當於Java C#Array.Copy

public void DoSomething(float[][] array){ 
    for (int i = 0; i < array.GetLength(0); i++) 
    { 
     int len = array[0].length; 
     double[] copy = new double[len]; 
     Array.Copy(array[i], copy, len); 

     ... 
    } 
} 

我試圖將其轉換成Java。我嘗試這樣做:

public void DoSomething(float[][] array){ 
    for (int i = 0; i < array[0].length; i++) 
    { 
     int len = array[0].length; 
     double[] copy = new double[len]; 
     copy = Arrays.copyOf(array[i], len); 

     ... 
    } 
} 

但我得到的錯誤信息:

類型不匹配:不能從float []轉換翻番[]

我能做些什麼,使之在Java中工作?

+0

定義「產生不同的結果」。不同於*什麼*確切? – Bohemian 2012-03-10 08:21:11

+0

請注意,它不是在C#中投射。這是一個轉換。從.NET [文檔Array.Copy(Array,Array,int)'](http://msdn.microsoft.com/en-us/library/k4yx47a1.aspx):「類型兼容性定義如下: [...]如果從源類型到目標類型的複製是擴展轉換,則兩個內置(預定義)值類型是兼容的[...]有關轉換的更多信息,請參見[Convert.ToDouble(float) ](http://msdn.microsoft.com/en-us/library/kc01y017.aspx)「 – 2013-11-04 13:26:52

回答

2

您正試圖將float的數組分配給double的數組。試試這個:

pubic void DoSomething(float[][] array){ 
    for (int i = 0; i < array[0].length; i++) 
    { 
     int len = array[0].length; 
     float[] copy = new float[len]; // Note change to array type 
     copy = Arrays.copyOf(array[i], len); 

我不能爲C#說話,但Java是一種「強類型」的語言,這意味着你不能做這樣的事情,你正在嘗試什麼。在java中,一個float可以投射到doublefloat[]可以而不是投射到double[]

0

使用

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 

方法您的陣列的整體部分複製到另一陣列。 (JavaDocs

+1

該方法將編譯,但它不會運行。從JavaDoc中鏈接到:「拋出ArrayStoreException ... [if] src參數和dest參數引用其組件類型是不同基元類型的數組。 – yshavit 2012-03-09 19:52:28

+0

而這就是忽略了這樣的事實,即如果它*運行*因爲精度差異而要求您遇到麻煩。 – 2012-03-09 19:54:14

+0

@BrianRoach原則上,他們可以檢查並將其轉化爲循環標準,在循環中他們通過常規規則將「浮動」推廣爲「雙倍」。但是,這將打破擁有基本上只是memcpy的本地超高速方法的全部目的。 – yshavit 2012-03-09 19:56:22

2

因爲在Java doublefloat是不一樣的東西,並有不同的精度。 (參見:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

編輯補充:至於如何使它工作,你需要做手工鑄造每個元素double。但是,您可能會遇到精度問題;見:Convert float to double without losing precision

+0

我的問題的一部分是爲什麼C#允許它。我猜它隱式地投射數組。是這樣嗎?是否有方法在Java中進行轉換/轉換? – adam0101 2012-03-09 19:57:04

+0

float []不能轉換爲double [] – Bohemian 2012-03-09 19:57:35

+0

@ adam0101 - 我不是C#的人,我不得不去查找它。正如我提到的,你可以*在Java中將'float'強制轉換爲'double',但是結果值可能不是你想要的。你試圖使用的函數不會爲你做這件事,你必須自己編寫循環並且執行演員。數組本身不能被投射。 – 2012-03-09 20:01:43