Как систематизировать проверку «а вполне равно b» (либо методом округления, либо | a - b | ~ 0) для любого значения a?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как систематизировать проверку «а вполне равно b» (либо методом округления, либо | a - b | ~ 0) для любого значения a?

Сообщение Anonymous »

Мой контекст
Я реализовал метод равенства(Object o) для объекта скорости ( здесь), что, когда он сталкивается с сравниваемым значением в м/с, когда оно само в км/ч (в примере), перед сравнением значений также помещается сравниваемое значение в км/ч. И я тестирую его в этом тесте, где он запускается последним оператором AssertEquals(...):

Код: Выделить всё

@Test
@DisplayName("Ex E1, Benson Ch. 3")
void ex_Benson_Ch3_E1() {
LOGGER.info("Asafa Powell (Jamaïque) court 100m en 9.74s.  Quelle est sa vitesse moyenne ?\nSerait-il en infraction dans une zone scolaire où la vitesse est limitée à 30 km/h ?");

Vitesse vitesseMoyenne = new Vitesse(100, 9.74); // Par défaut, en mètres secondes
assertEquals(10.3, vitesseMoyenne.vitesse(), 0.1, "La vitesse moyenne du coureur n'est pas la bonne, en m/s");

// Vérifier les conversions, étape par étape
Vitesse v1 = new Vitesse(vitesseMoyenne);

v1.convertir(KILOMETRE);
assertEquals(0.0103, v1.vitesse(), 0.1, "La vitesse moyenne du coureur n'est pas la bonne, en km/s");
assertEquals("km/s", v1.uniteMesure().symbole(), "La vitesse moyenne du coureur n'est pas exprimée en km/s");

v1.convertir(HEURE);
assertEquals(36.961, v1.vitesse(), 0.001, "La vitesse moyenne du coureur n'est pas la bonne, en km/h (A)");
assertEquals("km/h", v1.uniteMesure().symbole(), "La vitesse moyenne du coureur n'est pas exprimée en km/h (A)");

// Vérifier la conversion d'un seul tenant
Vitesse v2 = new Vitesse(vitesseMoyenne);

v2.convertir(KILOMETRE, HEURE);
assertEquals(36.961, v2.vitesse(), 0.001, "La vitesse moyenne du coureur n'est pas la bonne, en km/h (B)");
assertEquals("km/h", v2.uniteMesure().symbole(), "La vitesse moyenne du coureur n'est pas exprimée en km/h (B)");

if (v2.vitesse() > 36.0) {
LOGGER.info("Il serait bien en infraction dans une zone limitée à 30 km/h !");
}
else {
Assertions.fail("Il aurait dû être en infraction dans une zone limitée à 30 km/h");
}

// La vitesse moyenne, qui est restée en m/s, doit être égale à celle en km/h.
assertEquals(vitesseMoyenne, v2, "La vitesse moyenne du coureur, en m/s, doit être la même que celle en km/h, car une conversion est attendue durant la comparaison");

// Un tri de vitesses doit les mettre dans le bon ordre.
Vitesse v3 = new Vitesse(15.9, KILOMETRE, HEURE);
Vitesse v4 = new Vitesse(12.4, KILOMETRE, HEURE);
Vitesse v5 = new Vitesse(0.02, METRE, SECONDE);
Vitesse v6 = new Vitesse(27.46, METRE, SECONDE);
List vitessesCst = List.of(v3, v4, v2, v1, v6, v5, vitesseMoyenne);
List vitesses = new ArrayList(vitessesCst);

vitesses.sort(Vitesse::compareTo);
LOGGER.info("Tri de vitesses : {} → {}", vitessesCst, vitesses);

// [15.9km/h, 12.4km/h, 36.961km/h, 36.961km/h, 27.46m/s, 0.02m/s, 10.267m/s]
// → [0.02m/s, 12.4km/h, 15.9km/h, 36.961km/h, 36.961km/h, 10.267m/s, 27.46m/s]
int indexOfVitesseMoyenne = vitesses.indexOf(vitesseMoyenne);
int indexOfV1 = vitesses.indexOf(v1);
int indexOfV2 = vitesses.indexOf(v2);
int indexOfV3 = vitesses.indexOf(v3);
int indexOfV4 = vitesses.indexOf(v4);
int indexOfV5 = vitesses.indexOf(v5);
int indexOfV6 = vitesses.indexOf(v6);
assertEquals(0, indexOfV5, "L'index de la première vitesse de la liste triée n'est pas le bon");
assertEquals(1, indexOfV4, "L'index de la deuxième vitesse de la liste triée n'est pas le bon");
assertEquals(2, indexOfV3, "L'index de la troisième vitesse de la liste triée n'est pas le bon");
assertTrue(indexOfV1 >= 3 && indexOfV1 = 3 && indexOfV2 = 3 && indexOfVitesseMoyenne 

Подробнее здесь: [url]https://stackoverflow.com/questions/79880817/how-to-systematise-a-checking-of-a-quite-equals-to-b-either-with-round-method[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»