2011-05-29 11 views

ответ

4

Вы пытаетесь сделать автообъект int объекту Double, что является недопустимым.

Try:

int numOfPrimes=pf.FindNumPrimes(10000); 

Double frequency=((double)numOfPrimes)/10000d; 
+0

Это ненужный бросок и ненужный бокс в дальнейшем. – Bozho

4

Не отбрасывать из примитивов в типы обертки. Используйте нижний регистр double. И вам не нужно кастинг в этом случае - компилятор делает это автоматически. Вышеприведенное может быть упрощено до:

int numOfPrimes = ...; 
double frequency = numOfPrimes/10000d; 

Вы почти никогда не должны смешивать примитивы с обертками. И всегда предпочитайте примитивы (если возможно). Используйте Double.valueOf(..) для преобразования, если вам нужно.

3

Double не примитивный тип (например, INT, длинный, байт, и т.д.). Это тип класса. Вы можете конвертировать между двойным и двойным использованием autoboxing, но не между int и Double.

Вы должны либо объявить numOfPrimes, как double или сделать бросок к double вместо того, Double

double numOfPrimes=pf.FindNumPrimes(10000); 
Double frequency=((Double)numOfPrimes)/10000d; 

или

int numOfPrimes=pf.FindNumPrimes(10000); 
Double frequency=((double)numOfPrimes)/10000d; 

или без ненужных слепков:

double numOfPrimes = pf.FindNumPrimes(10000); 
Double frequency= numOfPrimes /10000d; 

или

int numOfPrimes = 10; 
Double frequency = numOfPrimes /10000d; 
+0

это некоторые ненужные ролики. – Bozho

+0

Технически они есть. Иногда я предпочитаю сделать намерение явным (в случае 2). В первой версии я был просто ленив :). –

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