Разница в стоимости с использованием объема для распечатки на экран - PullRequest
0 голосов
/ 26 октября 2019

Я учусь на первом курсе программы по компьютерному программированию в колледже и застрял в этой части задания (учитель тоже повсюду, и от него трудно получить разъяснения). Эта программа, которую мы создаем, предназначена для транспортной компании, чтобы определить, какая упаковка является наименее дорогой. Мы берем 3 переменные (ДхШхВ) с двумя пакетами и рассчитываем объем и стоимость. Но тогда у нас должны быть утверждения, по которым лучше использовать объем? Вот вопрос

** Программа должна рассчитать разницу в стоимости, используя разницу в объеме, и дать следующее (в порядке приоритета):

  • Если разницы нет, отобразите стоимость одинаковую
  • Если стоимость одного меньше, чем в два раза другого, отобразите, что он «немного больше»
  • Если стоимость одного меньше, чем в три разадругой, покажите, что это «вдвое»
  • Если стоимость одного меньше, чем в четыре раза больше другого, покажите, что это «втрое»
  • Если стоимость одного меньше, чемв пять раз больше, покажите, что это «четверка»
    в противном случае, покажите, что это вычисленное кратное **

Я пробовал некоторые операторы if, используя объемы и сравнивая их, потом усталсо стоимостью и сравнение двух пакетов со стоимостью, но не получил результат.

    if (package1.calcVolume()==package2.calcVolume()){
        System.out.println("The cost of both packages are the same.");
    }
    else if (Math.max(package1.calcVolume(), package2.calcVolume()) == package1.calcVolume()){

        if (package1.calcVolume()<=(2*package2.calcVolume())){

            System.out.println("The cost of package 1 is slightly more.");
        }
        else if (package1.calcVolume()<=(3*package2.calcVolume())){

            System.out.println("The cost of package 1 is two times more.");
        }
        else if (package1.calcVolume()<=(4*package2.calcVolume())){

            System.out.println("The cost of package 1 is three times more.");
        }
    }
    else if (Math.max(package1.calcVolume(), package2.calcVolume())== package2.calcVolume()) {

        System.out.println("Package 2 is more.");   //Place holder for now
    }

При вводе 2,2,2 как LxWxH для пакета 1 и 1,1,1 для пакета 2мы должныget 'Первый пакет в три раза больше'

Вместо того, чтобы получить «дважды» и «четверку», и с этим кодом я не думаю, что получил что-либо.

1 Ответ

0 голосов
/ 26 октября 2019

Каждый раз, когда вы делаете что-то вроде 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.

Поговорим о беспорядке в коде. Да, чрезмерное комментирование также является беспорядочным, но все помещено в код, чтобы помочь. При желании его можно легко удалить.

...