Как сравнить 3 числа в java

Сравнение 3 чисел

Как можно написать эту задачу проще и почему у меня не вычитается максимальное значение от минимального?

Сравнение вещественных чисел
И так, всем понятно (надеюсь) что код ниже выведет false. Как сравнить эти два числа, используя.

Сравнение числа с диапазоном других чисел
Здравствуйте, помогите с возникшем вопросом. if (edt6.Text=’200′)and(edt7.Text=’10’.

Задание на сравнение чисел, но что-то здесь не так о_О
Условия задачи A. Три брата ограничение по времени на тест 1 секунда ограничение по памяти.

Дополните пожалуйста эти методы! скалярное произведение векторов, умножение на скаляр, сравнение векторов, сравнение
public class VectorTricks

Поиск чисел в строках и сравнение этих чисел
Здравствуйте. Помогите пожалуйста с задачей: есть файл, в нём несколько строк. В каждой строке.

Сравнение 3 чисел
Здравствуйте. Вопрос такой, дано 4 целых числа, если 3 из них равны, то нужно вывести 0, а если нет.

Сравнение чисел
Надеюсь найдется кто-то, который пишет на этом языке. В общем суть такая нужно как-то сравнить два.

Сравнение чисел
Нужно сравнить числа в одномерном массиве, если они одинаковы, то числа одинаковы, если нет, то.

Как сравнить строку, которая содержит целые числа в JAVA

У меня есть некоторые проблемы со сравнением строк, которые содержат целые числа. Что-то вроде A11 и A9 или BA230 и BA7 или 123 и 9 Я знаю, когда я хочу сравнить целые числа (которые являются строковыми типами), мне нужно перейти в Integer и сравнить Но это не тот случай.

Он также содержит буквы и цифры, поэтому я не могу перейти на целое число.

Когда я сравниваю A11 и A9 , используя метод compareTo , он говорит, что A9 больше. И когда я сравниваю 123 с 9 , он говорит, что 9 больше.

Кто-нибудь сталкивался с этой проблемой раньше? Не могли бы вы мне помочь? Благодарю.

3 ответа

String.compareTo — сравнивает однозначное значение каждого символа. он вернется, когда обнаружит, что два символа не равны.

А11 сравнить с А9:

Шаг1: «А» сравнить с «А»

Шаг 2: «1» сравнить с «9». Значение Unicode ‘1’ равно 49, значение Unicode ‘9’ равно 57.

Сравнение чисел в Java

в Java все числовые типы распространяются с java.ленг.Число. Было бы неплохо иметь такой метод, как:

меня беспокоят случаи, когда двойной 2.00000 не равен int 2. Они обрабатываются встроенными равными? Если нет, есть ли способ написать простую функцию сравнения чисел в java? (внешние библиотеки, такие как Apache commons, в порядке)

7 ответов

A Double is никогда equals до Integer . Кроме того, double — это не то же самое как Double .

в Java есть примитивные типы и ссылочные типы. Истинно числовые типы в Java не простираются от Number , потому что они примитивы.

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

вопросы

On int vs Integer :

On Number для сравнения:

см. также

на числовые типы являются интегральными типами и типами с плавающей запятой. Целочисленные типы byte , short , int и long и char . Типы с плавающей запятой: float и double .

о вычислениях смешанного типа

вычисление смешанного типа является предметом по крайней мере 4 головоломок в Java Puzzlers.

вот различные отрывки:

обычно лучше избегать вычислений смешанного типа [. потому что они по своей природе запутанно [. ] Нигде это не является более очевидным, чем в условных выражениях. Сравнения смешанного типа всегда запутанно, потому что система вынуждена продвигать один операнд, чтобы соответствовать типу другого. Преобразование невидимо и может не дать результатов, которые вы ожидаете

предписание: избегайте вычислений, которые смешивают интегральные и типы с плавающей запятой. Предпочитаю интегральную арифметику плавающей точке.

Я знаю, что старая тема, но. Для сравнения двух чисел в Java можно использовать метод compareTo из BigDecimal. BigDecimal может содержать все от короткого до двойного или BigInteger, поэтому его идеальный класс для этого.

Так что вы можете попробовать написать что-то вроде этого:

это, безусловно,не лучший подход к производительности. Следующие тесты работали до сих пор, по крайней мере с JDK7:

конкретный метод, который вы предлагаете, потерпит неудачу, потому что он использует equals() наследуется от Object . То есть, он проверит, чтобы увидеть, если Number объекты были такими же, не будь их значения были одинаковыми.

если это был просто иллюстративный пример, я обновлю свой ответ.

полигенов на самом деле в значительной степени покрывает землю, я направился к. Вы также можете быть заинтересованы в этом вопросе: почему не java.ленг.Количество реализации сопоставимо?.

если вы хотите знать, являются ли ссылки на объекты одинаковыми, то существующие методы соответствуют законопроекту. А Double представляют 2.0 и Integer представляют 2 это определенно разные объекты и, конечно же, не взаимозаменяемые в общем смысле.

если вы просто хотите знать, совпадают ли числовые значения, вы можете использовать количество.doubleValue() метод преобразования обоих чисел в двойные, а затем сравнить эти числа вместе (возможно учитывая небольшой допуск, поскольку большинство чисел представлены неточно, например 1.99999999996583 для того, что должно быть 2, в зависимости от промежуточных шагов расчета). Что-то вроде следующего:

сравнение чисел между целым числом и плавающей точкой почти никогда не даст того, что вам нужно. Если, однако, это простое упражнение, вы можете реализовать сравнение, сравнив строковые представления значений, как в:

по касательной к паре ответов, могу ли я предложить вместо того, чтобы писать что-то вроде:

это гораздо более лаконично, и я считаю, немного более эффективным, чтобы написать:

Если оба значения null, o1==o2 вернет true. Если это не так, но это один и тот же объект, это тоже хорошо.

технически o2!=null не требуется для большинства реализаций equals, но если вы действительно настолько универсальны, чтобы сделать это на объектах как и в приведенном выше примере, вы, конечно, не знаете, как было написано каждое переопределение.

вы не можете назвать

потому что, если число является двойным, а number2-целым числом, они не будут одного класса, и вы получите исключение, сообщающее вам об этом факте.

вы можете сами написать класс сравнения, который принимает объекты Number, но вам придется учитывать различные подклассы Number

Изучаем Java

Если вам недостаточно точности встроенных целочисленных типов и чисел с плавающей точкой, можно обратиться к двум полезным классам в пакете java. math под названием Biglnteger и BigDecimal. Эти классы предназначены для манипуляций с числами, состоящими из произвольного количества цифр. Классы Biglnteger и BigDecimal реализуют арифметические операции произвольной точности для целых и действительных чисел соответственно.

Для преобразования обычного числа в большое используется статический метод valueOf:

Biglnteger а = Biglnteger.valueof(100);

К сожалению, к большим числам нельзя применять обычные математические операторы + и *.
Вместо этого программист должен использовать методы add и multiply из классов для работы с большими числами.

Biglnteger с = a.add(b); // с = a + b
Biglnteger d = с.multiply(b.add(Biglnteger.value.Of(2))); // d — с * (b + 2)

В отличие от языка C++, язык Java не поддерживает перегрузку операторов.

Программисты, создававшие класс Biglnteger, были лишены возможности переопределить операторы + и * для методов add и multiply в классе Biglnteger. Разработчики языка перегрузили лишь оператор + для конкатенации строк, решив не перегружать остальные операторы и не дав возможности остальным программистам на языке Java перегружать операторы самостоятельно.

В листинге 3.6 показана модификация программы для подсчета шансов выиграть в лотерее, приведенной в листинге 3.5. Теперь эта программа может работать с большими числами. Например, если вам предложили сыграть в лотерее, в которой нужно угадать 60 чисел из 490 возможных, то эта программа сообщит вам, что шанс выиграть равен 1 из
716395843461995557415116222540092933411717612789263493493351013459481104668848.
Удачи!

Программа, представленная в листинге 3.5, вычисляла следующий оператор:

lotteryOdds = lottery * (n — i + 1) / i;

При работе с большими числами эквивалентный оператор выглядит так.
lotteryOdds = lotteryOdds.multiply(Biglnteger.valueOf(n-i+1) .divide(Biglnteger.valueOf(i));

API:
java.math.BigInteger 1.1
— Biglnteger add(Biglnteger other)
— Biglnteger subtract(Biglnteger other)
— Biglnteger multiply(Biglnteger other)
— Biglnteger divide(Biglnteger other)

— Biglnteger mod(Biglnteger other)
Эти функции возвращают сумму, разность, произведение, частное и остаток от деления данного большого числа на значение переменной other.

— int compareTo(Biglnteger other)
Возвращает 0, если данное большое число равно значению переменной other, отрицательное число, если данное большое число меньше значения переменной other, и положительное число в противном случае.

— static Biglnteger vaiueOf(long x)
Возвращает большое число, значение которого равно значению переменной х.

API:
java.mathBigDecimal 1.1
— BigDecimal add (BigDecimal other)
— BigDecimal subtract (BigDecimal other)
— BigDecimal multiply (BigDecimal other)
— BigDecimal divide (BigDecimal other, int roundingMode)
Возвращает сумму, разность, произведение и частное от деления большого десятичного числа на значение переменной other. Чтобы вычислить частное, нужно поддерживать режим округления. Режим BigDecimal.
ROUND HALF UP означает обычное округление (т.е. в сторону уменьшения, если последняя цифра меньше 5, и в сторону увеличения, если она больше 5). Для обычных вычислений этого достаточно. Другие режимы округления описаны в документации по интерфейсу API.

— int compareTo(BigDecimal other)
Возвращает 0, если данное число типа BigDecimal равно значению переменной other, отрицательное число, если данное число меньше значения переменной other, и положительное число в противном случае.

— static BigDecimal vaiueOf (long x)
— static BigDecimal vaiueOf (long x, int scale)

Возвращает большое десятичное число, значение которого равно значению переменной х или х/10 scale

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *