#java #math #division
#java #математика #разделение
Вопрос:
Что не так с этим кодом
int numOfPrimes=pf.FindNumPrimes(10000);
Double frequency=((Double)numOfPrimes)/10000d;
Говорит
найдены необратимые типы: требуется int: java.lang.Двойная Двойная частота = ((Double)numOfPrimes) / 10000 d;
Ответ №1:
Вы пытаетесь автоматически привязать int
к Double
объекту, который является недопустимым.
Попробуйте:
int numOfPrimes=pf.FindNumPrimes(10000);
Double frequency=((double)numOfPrimes)/10000d;
Комментарии:
1. это ненужное приведение и ненужный блок позже.
Ответ №2:
Не приводите примитивы к типам-оболочкам. Используйте нижний регистр double
. И в этом случае вам не нужно никакого приведения — компилятор делает это автоматически. Вышесказанное может быть упрощено до:
int numOfPrimes = ...;
double frequency = numOfPrimes / 10000d;
Практически никогда не следует смешивать примитивы с оболочками. И всегда предпочитайте примитивы (если это возможно). Используйте Double.valueOf(..)
для преобразования, если вам нужно.
Ответ №3:
Double
не является примитивным типом (таким как int, long, byte и т.д.). Это тип класса. Вы можете конвертировать между double и Double с помощью автоматической упаковки, но не между int
и Double
.
Вы должны либо объявить numOfPrimes
как double
, либо выполнить приведение к double
вместо a 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;
Комментарии:
1. это несколько ненужных приведений.
2. Технически они есть. Иногда я предпочитаю делать намерение явным (в случае 2). В первой версии я был просто ленив :).