2012-03-26 107 views
1

我不確定這裏發生了什麼,但這裏是我遇到問題的一部分(還有其他幾個,但我認爲如果可以的話弄清楚這裏的邏輯我可以在其他地方應用)。 我最近有一個問題,我在使用點,但不能得到小數,所以,as suggested,我切換到point2D允許雙打。由於切換我得到的錯誤,我似乎無法理解如何解決,因爲我沒有看到原因(我知道改變到point2D觸發它,但我看不到連接)。運算符*未定義爲參數類型double,Point2D.Double

我有以下代碼:

Double x_data = (Double) data.get(k); 
for (int c = 0; c <= 100; c++) { //the c variable caps the percent 
    double percent = roundTwoDecimals(c*.01); 
    double value1 =(sum - percent * x_data); 

數據的Point2D(這我鑄造將翻一番,總和變量我送的這個方法的確是一個整數,但我的列表在日食中,我在'percent * x_data'下面看到了可怕的紅色下劃線,我搜索了一下,發現這個錯誤通常是由於某個人試圖乘以一個字符串或其他東西引起的,但我相當肯定這些都是雙打。現在得到以下錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The operator * is undefined for the argument type(s) double, Point2D.Double 
    The operator * is undefined for the argument type(s) double, Point2D.Double 
    Syntax error, insert ")" to complete ArgumentList 
    The operator * is undefined for the argument type(s) double, Point2D.Double 

據我所知,涉及這個過程的事情要麼是雙重的,要麼是雙倍的,所以我不確定爲什麼Point2D會涉及這些運營商。

我也有一個,限制了小數位的方法:

static double roundTwoDecimals(double d) { 
     DecimalFormat twoDForm = new DecimalFormat("#.###"); 
     return Double.valueOf(twoDForm.format(d)); 

但Double.valueOf不是一個選項了,所以我上的錯誤(錯誤的Point2D)(繞過它,我只是現在返回d而不限制小數)。

請幫忙。我認爲point2D沒有問題,但我必須在結構上做錯了什麼。

由於

+0

從我在異常中看到的內容中,您試圖使用'*'運算符將'double'類型的變量與'Point2D.Double'類型相乘。 Java VM告訴你它不知道該怎麼做。也許你已經導入了'Point2D.Double',它覆蓋了'Double',它是本地類型'double'的對象版本? – len 2012-03-26 16:47:41

回答

3

根據堆棧跟蹤,x_data是類型Point2D.Double,不java.lang.Double的。 檢查您的進口,刪除Point2D.Double並添加java.lang.Double

現在,您將無法將Point2D投射到Double。您可能的意思是使用yourDoublePoint2D.getX()和,其返回double(不需要強制轉換)。

作爲一個側面說明,你可以寫這樣的事情:

Double d1 = 1.5; 
double d2 = 2.3; 
double d3 = d1 * d2; 

編輯
你很可能會導入Point2D.Double類這樣的:

import java.awt.geom.Point2D.*; 

import java.awt.geom.Point2D.Double; 

java.lang.Double產生名稱衝突。請參閱下面的代碼示例,該代碼將按預期工作:

import java.awt.geom.Point2D; //Note: only import Point2D, not Point2D.Double 

public class Test { 

    public static void main(String[] args) { 
     Point2D.Double point = new Point2D.Double(1.5, 2.5); 
     double x = point.getX(); //1.5 
     double y = point.getY(); //2.5 
     Double xx = point.getX(); //1.5 
     Double yy = point.getY(); //2.5 
    } 
} 
+0

我明白你的意思,它是有道理的,但我需要使用兩者。我需要Point2D.Double和(在這種情況下)java.lang.Double ...我*認爲*當我導入point2D.Double時,它將所有其他雙打轉換爲那一個。有沒有一種方法可以爲一組變量使用特定的雙精度值,另一種用於不同的精度? – 2012-03-26 16:48:51

+0

是的,通過它的全名來指定它,比如'java.lang.Double'而不是'Double'。這也適用於Point2D.Double btw – len 2012-03-26 16:50:41

+0

@len謝謝,這很瞭解。我將開始測試,但有沒有辦法讓另一個默認?我的代碼非常大,而不是將許多引用改爲java.lang.Double,我寧願保留那些完整的,只是在我需要時專門調用Point2D.Double。 – 2012-03-26 16:54:48

0

如果您不導入Point2D。Double,但是通過完整的包名來引用它的所有實例,「unadorned」Double應該是java.lang.Double。

相關問題