Java - 2 Массивы типа float - обнаружена возможная потеря точности: требуется float: int

У меня есть 2 массива типа float

float[] a = new float [100]; 
float[] b = new float [100]; 

Я хочу выполнить следующее

for (int i=0; i<100; i++) {
      a[b[i]]++ // Or a[b[i]] + a[b[i]] + 1;
}

Обнаружена ошибка, возможная потеря точности: требуется число с плавающей запятой: int


person clazzy    schedule 17.02.2012    source источник
comment
это логическая ошибка с вашей стороны; Я не думаю, что вы понимаете, как работают массивы. Пожалуйста, почитайте о них :)   -  person Adrian    schedule 17.02.2012


Ответы (5)


a[b[i]]

b[i] - это число с плавающей запятой, поэтому вы пытаетесь использовать число с плавающей запятой в качестве индекса для массива. В сообщении об ошибке говорится, что вы используете число с плавающей запятой, но вам нужен тип int.

person raveturned    schedule 17.02.2012

вы не можете использовать число с плавающей запятой, возвращаемое массивом «b», для доступа к массиву «a». Вы должны привести к int.

person Dario    schedule 17.02.2012

Индексы массивов являются целыми числами, поэтому вы не можете использовать число с плавающей запятой, чтобы попытаться получить доступ к определенному элементу в массиве. Вам нужно либо изменить типы ваших массивов, либо преобразовать число с плавающей запятой из b[i] в целое число, а затем использовать его в качестве индекса для доступа к a.

person Anthony Grist    schedule 17.02.2012

Я не хочу показаться грубым, но почему?

Несмотря на это, вы не можете ссылаться на индекс массива со значением с плавающей запятой, и поэтому вы получаете эту ошибку. Если вам действительно нужно, вам нужно преобразовать значение b[i] в ​​int.

person Brandon Kindred    schedule 17.02.2012
comment
В этом есть смысл. Я, вероятно, не совсем понимаю, какова ваша конечная цель, но, судя по тому, как я это читаю, этот фрагмент кода этого не сделает. - person Brandon Kindred; 17.02.2012
comment
Моя цель состоит в том, чтобы построить histo.gram, логика здесь состоит в том, чтобы перебрать каждый пиксель в изображении, построить новый массив с плавающей запятой, который накапливает все сохраненные уникальные значения с плавающей запятой яркости. Я экспериментирую, чтобы увидеть, как накапливать список массивов с плавающей запятой, взяв все уровни яркости каждого пикселя и вычислив гистограмму. - person clazzy; 17.02.2012

Все уже указывали, что индексы массива являются целыми числами, но если вы используете int(b[i], вы можете получить ошибку округления. Попробуйте сначала округлить его, а затем литье:

a[int(Math.round(b[i])]++
person Charlie G    schedule 17.02.2012
comment
Кроме того, похоже, никто не заметил, что ваш комментарий читается как // Or a[b[i]] + a[b[i]] + 1, я думаю, вы имели в виду // Or a[b[i]] = a[b[i]] + 1 - person Charlie G; 17.02.2012