2016-09-18 18 views
0

何らかの理由で私のコードが実行されませんでした。 "プリミティブ型doubleでsqrt(double)を呼び出せません"というエラーが発生しました。そうでなければ、Math.sqrt(数学)行以外のエラーは発生しません。助けて?プリミティブ型doubleのsqrt(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を変数として使用しています。あなたはMathは、Javaのクラスがある

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

、ので、あなたがオブジェクト変数としてこれを使用することはできません行うことができます。 、

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

'Math'は変数名として有効です。単に' java.lang.Math'を上書きします。だからこそ割り当てが成功するのですが、次の行がエラーを引き起こす行です。 – Teepeemm

関連する問題