подразделение Java: найдены необратимые типы: int

#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). В первой версии я был просто ленив :).