Я пытаюсь решить проблему, сформулированную следующим образом: заданные сегменты набора и набор точек вычисляют, сколько сегментов содержит каждую точку.странное поведение сравнения двух знаковых целых чисел в цикле for
Проблема, с которой я столкнулся, - это когда мне приходится подсчитывать, сколько раз точка содержит сегмент. Когда у меня есть определенный вход, внутренний цикл, правильно увеличивает счетчик каждой точки, погоду, когда у меня есть другой набор данных, где происходит сравнение нуля с отрицательным числом и неотрицательным числом, оно ведет себя странно.
Ниже приведен просто сценарий, созданный для поиска проблемы, с которой я столкнулся, и не представляет фактической реализации.
Тестовые дают выходы следующим образом:
Случай 1:
String debug = "Test case 1: \n ";
debug += " \n - 2 Segments with coordinates [0, 5] and [7, 10].";
debug += " \n - 3 points at the coordinates 1, 6, and 11.";
int [] starts = new int[]{0, 7};
int [] ends = new int[]{5, 10};
int [] points = new int[]{1, 6, 11};
debug += "\n \n Calculating the coverage of the points: ";
for (int i=0; i<starts.length; i++) {
for (int j=0; j<points.length && (starts[i] <= points[j] && points[j] <= ends[i]); j++) {
debug += " \n * Point with coordinate " + points[j] + ", is between " + starts[i] + " and " + ends[i];
}
}
debug += "\n \n FINISHED the calculation!";
int start = 0, point = 1, end = 5;
debug += "\n \n Custom check for the 1st point: ";
debug += "\n - Is (" + start + " <= " + point + " and " + point + " <= " + end + ")? " + (start <= point && point <= end);
System.out.println(debug);
Выход:
Тестовый пример 1:
- 2 Сегменты с координатами [0, 5] и [7, 10].
3 точки с координатами 1, 6 и 11.
Расчет охвата точек:
точка с координатами 1, находится в пределах от 0 и 5
ЗАВЕРШЕНА расчет!
Пользовательские проверки на 1-й точки:
- Is (0 < = 1 и 1 < = 5)? истинная
Случай 2:
String debug = "Test case 2: \n ";
debug += " \n - 1 Segment with coordinates [-10, 10].";
debug += " \n - 3 points at the coordinates -100, 100, and 10.";
int [] starts = new int[]{-10};
int [] ends = new int[]{10};
int [] points = new int[]{-100, 100, 0};
debug += "\n \n Calculating the coverage of the points: ";
for (int i=0; i<starts.length; i++) {
for (int j=0; j<points.length && (starts[i] <= points[j] && points[j] <= ends[i]); j++) {
debug += " \n * Point with coordinate " + points[j] + ", is between " + starts[i] + " and " + ends[i];
}
}
debug += "\n \n FINISHED the calculation!";
int start = -10, point = 0, end = 10;
debug += "\n \n Custom check: ";
debug += "\n - Is (" + start + " <= " + point + " and " + point + " <= " + end + ")? " + (start <= point && point <= end);
System.out.println(debug);
Выход:
Тестовый пример 2:
- 1 Сегмент с координатами [-10, 10].
3 точки с координатами -100, 100 и 10.
Расчет охвата точек:
ЗАВЕРШЕНА расчет!
Пользовательские проверки:
- Is (-10 < = 0 и 0 < = 10)? true
Как вы можете видеть, условие во внутреннем цикле каким-то образом не правильно вычисляет случай с координатой 0 относительно сегмента [-10, 10].
Заранее благодарен, Endrit.
int [] points = new int [] {- 100, 100, 0}; У вас 0, а не 10, и вы написали. И -10 <0 <10. –