Стойността на променливата needed се заменя с текущата ѝ стойност, унможена по 5 (или разделена на 0.2).
Объркването идва от излишното "многословие" при израза и смесването на множители и делители.
В такива случаи винаги е добре да съкратим израза, като при нужда може да въведем локални променливи или константи, с които да се подобри четимостта.
Ако въпреки това кода остава сложен или е дълъг, може логиката да се изведе в отделен метод с добро име, който да бъде извикан, например:
public static void main(String[] args) {
// ....
if (mark < 20) {
double needed = calculateNeeded(mark);
System.out.printf("The team of %s get %.3f on %s.%n", country, mark, device);
System.out.printf("%.2f%%", needed);
}
}
private static double calculateNeeded(double mark) {
// ....
}
Обратно на въпроса, израза може да се запише по-кратко и ясно така:
needed /= 20 / 100
или направо:
needed /= 0.2
А горните два израза са еквивалентни на:
needed *= 100 / 20
или направо:
needed *= 5
В последния пример 5 се явява "магическо число" (стойност, чието значение не е ясно от кода) и е добра идея да се именува, например с локална променлива (името трябва да описва значението ѝ възможно най-точно, но в случая съм дал накакво име колкото за примера, защото не съм запознат с контекста на задачата):
double neededMultiplier = 5.0;
needed *= neededMultipler;
Нека проверим дали изразите са еквивалентни, за няколко стойности на needed:
При needed = 5:
needed = (5 / 20) * 100 = 0.25 * 100 = 25
needed /= 0.2; // 5 / 0.2 = 25
needed *= 5 // 5 * 5 = 25
При needed = 10:
needed = (10 / 20) * 100 = 0.5 * 100 = 50
needed /= 0.2; // 10 / 0.2 = 50
needed *= 5 // 10 * 5 = 50