2012-03-26 142 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。

相关问题