Каждый раз, когда вы делаете что-то вроде package1.calcVolume()
или package2.calcVolume()
, вы, по сути, вызываете метод calcVolume () в классе Package . Может показаться, что это не так, но это отнимает много времени, не говоря уже о ненужной обработке снова и снова. Сделайте это один раз:
double p1 = package1.calcVolume();
double p2 = package2.calcVolume();
Да, это должен быть тип данных double (или float), чтобы правильно получить немного меньшую часть стоимости, так что если это не такуже исправьте тип возврата метода calcVolume () . Теперь используйте p1 или p2 вместо того, чтобы всегда вызывать метод calcVolume () .
Удалив все вызовы, вы в конечном итоге удалите многобеспорядка кода, который сделает ваш код легче читать и следовать, но самое главное, ваш процессор будет любить вас за это, как и JVM. Ну, может быть, не так много, но, по крайней мере, вам не нужно будет так много печатать.
Какой пакет «меньше», а какой «больше»? Пакет 1 вдвое больше, чем Пакет 2, или Пакет 2 больше, чем Пакет 1? Это может сделать для многих IF / ELSE. Одного набора IF / Else должно быть достаточно, поэтому рекомендуется поместить эти обозначения имен также в строковые переменные и позволить коду определить, какая строка содержит какую строку перед отображением сообщения на консоли:
String pkgHigh = "Package 'A'";
String pkgLow = "Package 'B'";
Теперь, какой пакет имеет больший размер (объем):
p1 = 34;
p2 = 79;
Поскольку мы имеем дело только с двумя пакетами, мы будем предполагать, что объем для p1 всегда будет равен или больше, чемобъем для p2, но давайте проверим, но прежде чем мы это сделаем, давайте установим наш множитель разности объемов:
double volDiff = p1 / p2;
Здесь переменная двойного типа volDiff объявлена и инициализирована с делениемр1 и р2 (р1 / р2). Это деление хорошо работает, если объем пакета «А» равен больше или равен пакета «В». Теперь давайте посмотрим, какой пакет на самом деле больше по объему:
if (p1 != p2 && Math.max(p1, p2) == p2) {
// Package 2 has the greater volume...
volDiff = p2 / p1;
pkgHigh = "Package 'B'";
pkgLow = "Package 'A'";
}
Мы ясно увидели, что p2 больше, чем p1, из-за значений, которые мы там жестко закодировали. Однако жесткое кодирование не будет иметь место, когда код выполняется в реальном мире. Эти значения будут определены после ввода фактических размеров упаковки. В любом случае мы знаем, что в этом случае p2 больше, чем p1, и вот как вышеприведенный блок IF определяет, что:
- Если p1 не равно p2 И метод Math.max () определяет, что p2 больше из двух пакетов:
- p2 больше p1 , поэтому разделите p2 на p1 (p2 ÷ p1), чтобы получить множитель разности громкости;
- Далее установите строковые переменные pkgHigh до "Пакет" B "" и pkgLow до "Пакет" A "" . Теперь в сообщении будет отображаться правильный порядок пакетов, который соответствует пакетам с большим и меньшим объемом.
Теперь нужно просто кодировать ряд условий IF / Else, чтобы отобразить запрошенный результат. Вот как будет выглядеть весь код:
// Double data types should be used for volume values.
double p1 = (double) 32; // Volume of Package 1.
double p2 = (double) 32; // Volume of Package 2.
String msg = ""; // For Message String to Display.
String pkgHigh = "Package 'A'"; // Package designation variable.
String pkgLow = "Package 'B'"; // Package designation variable.
// Double data type should be used for the Volume difference Multiplier.
double volDiff = p1 / p2; // Volume Difference Multiplier.
/* Determine if the variables contents need to change.
The IF block below checks to see if package 1 and
package 2 are not equal and sees if the volume for
package 2 is higher than package one. If both of these
pose as true then the Volume Difference Multiplier is
calculated based on Package 2 divided by Package 1
since Package 2 is deemed to contain a higher volume.
The package designation string variables are also changed
to properly reflect which package is higher or lower
within the message strings. Otherwise package designators
remain the very same as they were initialized to. */
if (p1 != p2 && Math.max(p1, p2) == p2) {
// Package 2 has the greater volume...
volDiff = p2 / p1;
pkgHigh = "Package 'B'";
pkgLow = "Package 'A'";
}
/* Determine the appropriate message to display in console based on the
Volume Difference Multitplier value. Package designation within the
messages has been determined pkg1/pkg2 initialization and within the
above IF block. */
// Packages are the same cost.
if (volDiff == 1.0d) {
msg = "The shipping cost for " + pkgHigh + " and " +
pkgLow + " are the same.";
}
// One Package cost is slightly higher than the other.
else if (volDiff > 1.0d && volDiff < 2.0d) {
msg = "The shipping cost for " + pkgHigh +
" is slightly higher than it is for " +
pkgLow + ".";
}
// One Package cost is Twice as much as the other.
else if (volDiff >= 2.0d && volDiff < 3.0d) {
msg = "The shipping cost for " + pkgHigh +
" is twice the cost than it is for " +
pkgLow + ".";
}
// One Package cost is Triple that of the other.
else if (volDiff >= 3.0d && volDiff < 4.0d) {
msg = "The shipping cost for " + pkgHigh +
" is triple the cost than it is for " +
pkgLow + ".";
}
// One Package cost is Quadruple that of the other.
else if (volDiff >= 4.0d && volDiff < 5.0d) {
msg = "The shipping cost for " + pkgHigh +
" is quadruple the cost than it is for " +
pkgLow + ".";
}
// One Package cost is 'n' times greater than the other.
else {
/* Round DOWN the Multiplier value by using
Math.round() and converting to integer. */
int multiple = Math.round((int) volDiff);
msg = "The shipping cost for " + pkgHigh + " is " +
multiple + " times higher than it is for " +
pkgLow + ".";
}
System.out.println(msg); // Display the info message to Console.
Поговорим о беспорядке в коде. Да, чрезмерное комментирование также является беспорядочным, но все помещено в код, чтобы помочь. При желании его можно легко удалить.