2016-09-18 2 views
0

по какой-то причине мой код не запускается, я получаю сообщение об ошибке «не может вызывать sqrt (double) в двойном примитиве типа« thats единственная ошибка, которую я получаю, когда компилирую ее так, чтобы все else не вызывает ошибку, кроме строки Math.sqrt (math). Помогите?Невозможно вызывать 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

oops .. да, я не видел эту часть. веселит. –

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

Смежные вопросы