2010-11-21 3 views
1

Я написал этот код, но он не вычисляет ((((bY - aY)/(maxX - minX)) * (p.getX() - minX)) + aY) для меня. Пожалуйста, помогите мне.арифметическая проблема

часть коды: (У меня есть четыре точки, которые аУ означает «у» из точки «А»)

 int aY = minXY[0]; 
     int bY = maxXY[0]; 
     int cY = minXY[minXY.length - 1]; 
     int dY = maxXY[maxXY.length - 1]; 

    for (Point p : pointList) { 
      if ((p.getY() > ((((bY - aY)/(maxX - minX)) * (p.getX() - minX)) + aY)) && (p.getY() < ((((dY - cY)/(maxX - minX)) * (p.getX() - minX)) + cY))) { 

       list.add(p); 

      } else if (p.getY() < ((((bY - aY)/(maxX - minX)) * (p.getX() - minX)) + aY)) { 
       upperHull.add(p); 
       int m = ((((bY - aY)/(maxX - minX)) * (p.getX() - minX)) + aY); 
       System.out.println(m); 


      } else if (p.getY() > ((((dY - cY)/(maxX - minX)) * (p.getX() - minX)) + cY)) { 
       lowerHull.add(p); 

      } 



     } 

выхода будет целым числом, которое является "y" of point "a". полностью, моей конкретной арифметика оператор не работает.пожалуйста, помогите мне почему? Также я проверил каждое значение в арифметическом выражении, и они в порядке, но не могут вычислить результат для меня. специфический арифметический оператор: ((((bY - aY)/(maxX - minX)) * (p.getX() - minX)) + aY)

ответ

3

Было бы полезно, если бы вы объяснили, какой результат вы получаете, и что вам не нравится в этом. «невозможно вычислить результат» означает, что вы получаете какое-то исключение, но я не думаю, что это то, что вы имеете в виду.

Что вы, вероятно, имеете в виду, так это то, что результат, который вы получаете, не то, что вы ожидаете, и наиболее вероятная причина этого в том, что все ваши переменные - int, поэтому он выполняет целочисленную арифметику, но вы, вероятно, точечные результаты ваших подразделений.

Я предлагаю изменить локальные переменные на float или double, поэтому ints будет автоматически преобразовано перед выполнением арифметики.

Кроме того, похоже, что у вас есть два сложных арифметических выражения в нескольких случаях. Я бы вычислил их один раз и назначил их локальным переменным (внутри цикла, до if).

+0

«... и наиболее вероятная причина этого в том, что все ваши переменные являются int, поэтому он выполняет целочисленную арифметику, но вы, вероятно, хотите получить результаты с плавающей запятой из ваших разделов ...» - именно так. +1 – duffymo

+0

также у меня есть все, что нужно, чтобы удвоить, но все равно это не работает !!!! – user472221

+0

+1. Еще лучшая причина (чем эффективность) для извлечения локальных переменных - ясность. Очень сложно понять, что вы пытаетесь сделать; вычисление таких терминов, как deltaX и xRange, начнет разъяснять его. –

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