2016-09-18 60 views
0

我的代码不会运行我得到的错误“无法在原始类型double上调用sqrt(double)”这就是我编译它时得到的唯一错误,否则除Math.sqrt(数学)行外不会导致错误。帮帮我?由于某种原因,我的代码不会运行,我不能调用sqrt(double)原始类型double

public class Confused { 

public static double average(int x, int y) { 
double ave= (x+y)/2.0; 
return ave; 
} 
public static double slope(int x1, int x2, int y1, int y2){ 
double slope= (y2-y1)/(x2-x1); 
return slope; } 

public static int difference(int x, int y) { 
int diff=x-y; 
return diff; } 

public static int square(int x) { 
int power1=(int)Math.pow(x, 2); 
return power1; 

} 
public static double distance (int x1, int x2, int y1, int y2) { 
double Math= (square(difference(x2,x1))) + (square(difference(y2,y1))); 
double dist= Math.sqrt(Math); 
return dist; 

} 

public static void main(String[] args) { 
    System.out.println(average(2,3)); 
    System.out.println(slope(1,2,3,4)); 
    System.out.println(difference(10,5)); 
    System.out.println(square(10)); 
    System.out.println(distance(2,3,6,8)); 

} 

} 
+0

'Math'是Java –

+0

一类对于未来的问题,如果你删除了不会引起任何问题的代码,这将有助于('average','slope', 'difference'和'square'),并且复制和粘贴你得到的错误信息。 – Teepeemm

回答

3
double Math= (square(difference(x2,x1))) + (square(difference(y2,y1))); 
double dist= Math.sqrt(Math); 

你正在创建一个新的变量Math,下一行,你指的是新的变量,因为它阴影的全局类Math。所以它试图呼叫double.sqrt(double),这不存在。

+0

为什么要将一个变量命名为Math?是不是混淆和反对编码惯例? –

+0

@LakshithaRanasingha当然,但问题是为什么代码产生了特定的错误,而不是我是否会写相同的代码。 – Kiskae

+0

哎呀..是的,我没有看到那部分。干杯。 –

1

你是hiding内置类Math通过使用它作为一个变量。你可以做

double result = square(difference(x2, x1)) + square(difference(y2, y1)); 
return Math.sqrt(result); 
0

因为,Math是Java类,你不能用这个作为一个对象变量。而是使用一些其他的变量名:

double operation = (square(difference(x2,x1))) + (square(difference(y2,y1))); 
double dist = Math.sqrt(operation); 
+0

'Math'作为一个变量名是有效的,它只是覆盖'java.lang.Math'。这就是赋值成功的原因,但下一行是导致错误的原因。 – Teepeemm

相关问题