#java #math
#java #математика
Вопрос:
Я видел в другом вопросе, что решение для определения того, находится ли ваше число в диапазоне, было,
Math.abs(num1-num2) <= inRange
Где inRange — это число, которое вы пытаетесь выяснить, находится ли оно в диапазоне между num2 и num1.
Для меня эта формула прерывается, когда я вставляю эти числа.
Math.abs(25-(-25)) <= -5
Я пытаюсь найти, находится ли -5 между -25 и 25. Это уравнение неверно, даже если ответ верен, -5 находится между -25 и 25.
Пожалуйста, уточните для меня!
Комментарии:
1. формула определенно выглядит глючной. Просто любопытно, если у вас есть границы, а также число, разве вы не можете просто выполнить простое условие (a <= n <= b)? Я имею в виду, есть ли в этих вычислениях какой-то смысл в отношении прямого сравнения, который я упускаю?
Ответ №1:
Я не вижу никаких причин для использования Math.abs
вообще. Я бы использовал:
if (lowerBound <= value amp;amp; value < upperBound)
или
if (lowerBound <= value amp;amp; value <= upperBound)
если вы хотите, чтобы верхняя граница тоже была инклюзивной.
Действительно, Math.abs()
подход кажется полностью нарушенным — я сильно подозреваю, что вы неправильно поняли вопрос, в котором он был задан как решение.
Ответ №2:
Для получения бонусных баллов в Guava 10.x введен новый класс Range (используемый с диапазонами вспомогательных классов).:
import com.google.common.collect.Range;
import com.google.common.collect.Ranges;
public class RangeTest {
Range<Integer> range = Ranges.closed(-25, 25);
public boolean rangeTest(Integer candidate) {
return range.contains(candidate);
}
}
public class TestMain {
static RangeTest rangeTest = new RangeTest();
public static void doTest(Integer candidate) {
System.out.println(candidate " in -25.. 25: "
rangeTest.rangeTest(candidate));
}
public static void main(String[] args) {
doTest(-26);
doTest(-25);
doTest(-24);
doTest(-1);
doTest(-0);
doTest( 1);
doTest( 24);
doTest( 25);
doTest( 26);
}
}
Выходной сигнал:
-26 в -25.. 25: false
-25 в -25 .. 25: true
-24 в -25.. 25: true
-1 в -25.. 25: true
0 в -25 .. 25: true
1 в -25 .. 25: true
24 в -25 .. 25: true
25 в -25 .. 25: истина
26 в -25.. 25: ложь
Класс Range поддерживает открытые и закрытые диапазоны, диапазоны от -INF до INF и все виды операций, связанных с диапазоном, таких как членство, пересечение и диапазон.
Комментарии:
1. Начиная с Guava 14, вы должны использовать статические методы
Range
для создания экземпляраRange
s (Ranges
устарел), напримерRange.closed(-25, 25)
.
Ответ №3:
Просто делай:
bool isInRange = Math.min(num1,num2) <= inRange
amp;amp; Math.max(num1,num2) >= inRange;
Ваш текущий подход просто проверяет диапазоны чисел. на самом деле наименьшее и наибольшее расстояние между числами.
Ответ №4:
Приведенное ниже выражение будет проверять x
, находится ли оно между a
и b
:
Math.abs(x - a) Math.abs(b - x) == Math.abs(b - a)
Комментарии:
1. Ваш способ сложен, но это не тот способ, который можно использовать в разработке, он непонятен на первый взгляд и должен это доказать, поэтому лучше использовать более читаемый код.
Ответ №5:
Старый вопрос, однако метод Math.abs может быть более понятным в зависимости от того, над чем вы работаете, и его все равно стоит показать:
int x = 5;
int bounds = 25;
if(Math.abs(x) <= bounds) {
//run if x is anywhere between -25 and 25
}
Ответ №6:
у kotlin есть .. оператор
if (center.x in 0..MaxX) {
//Do stuff
}
if (center.y !in 0..MaxY) {
//Do stuff
}