2015-02-13 4 views
0

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

Вы наняты службой экспресс-доставки Expressimo для разработки приложения, которое вычисляет плату за доставку. Компания допускает два типа упаковочных букв, боксов и трех видов услуг - приоритет на следующий день, стандарт на следующий день и 2 дня/в следующей таблице приведена формула для расчетной платы.
Тип упаковки На следующий день приоритет На следующий день стандарт 2 день Буква $ 12 до 8 унций $ 10.50 до 8 унций Недоступно Коробка $ 15,75 за первый фунт. Добавьте $ 1.25 за каждый дополнительный фунт за первый фунт. $ 13,75 за первый фунт. Добавьте $ 1.00 за каждый дополнительный фунт за первый фунт. $ 7,00 за первый фунт. Добавьте $ 0.50 за каждый дополнительный фунт за первый фунт.

До сих пор я просто пытаюсь выяснить простой расчет для письма. У меня есть код, написанный для вычисления ТОЛЬКО ПЕРВОЙ ЛИНИИ ИНСТРУКЦИЙ! Но я получаю 0.0 для каждой платы за доставку. Это немного запутывает, поэтому я надеюсь, что объясню это правильно. Я не могу использовать массивы или циклы для этой программы. Вот мой класс драйвера:

public class ExpressimoDelivery { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     String pkg, service; 
     int ounces; 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter the package type (letter or box): "); 
     pkg = input.next(); 
     System.out.println("Enter the type of delivery service (P - for Priority, S - for Standard, TWO - for 2 Day): "); 
     service = input.next(); 
     System.out.println("Please enter the weight of the package in ounces: "); 
     ounces = input.nextInt(); 



     Delivery customer = new Delivery(pkg, service, ounces); 
     customer.setPackage(pkg); 
     customer.setService(service); 
     customer.setWeight(ounces); 

     System.out.println("You have chosen to mail a " + pkg + "\nand the cost" 
       + " to mail a " + pkg + " weighing " + ounces + " ounces with " + service + " service is: " 
       + customer.getTotal()); 
    } 

} 

А вот мой Delivery Класс:

public class Delivery { 

    public static final float LETTER_PRIORITY = 12.00f; 
    public static final float LETTER_STANDARD = 10.50f; 
    public static final float BOX_PRIORITY = 15.75f; 
    public static final float BOX_STANDARD = 13.75f; 
    public static final float BOX_TWO_DAY = 7.00f; 
    public static final float ADD_PRIORITY = 1.25f; 
    public static final float ADD_STANDARD = 1.00f; 
    public static final float ADD_TWODAY = 0.50f; 

    public String pkg, service; 
    public int weight = 0; 
    Scanner scanner = new Scanner(System.in); 
    public float fee; 

    public Delivery(String pkg, String service, int weight){ 
     this.pkg = pkg; 
     this.service = service; 
     this.weight = weight; 
    } 

    public void setPackage(String pkg){ 
     this.pkg = pkg; 
    } 

    public void setService(String service){ 
     this.service = service; 
    } 

    public void setWeight(int weight){ 
     this.weight = weight; 
    } 

    public String getPackage(){ 
     if (! (pkg.equals("letter") || pkg.equals("box"))) 
     { 
      System.out.println("ERROR: Unknown package type"); 
      pkg = ""; 
     } 
     return pkg; 
    } 

    public String getService(){ 
     if (! (service.equals("P") || service.equals("S") || service.equals("TWO")));{ 
      System.out.println("ERROR: Unknown delivery type"); 
      service = ""; 
     } 
     return service; 
    } 

    public float getWeight(){ 
     return weight; 
    } 

    public float getTotal(){ 
     if(pkg.equals("letter") && service.equals("P") && weight <= 8){ 
      fee = LETTER_PRIORITY; 
     } else if(weight > 8) { 
        System.out.println("Package too large for a letter. Please use box instead."); 

     } 
     return fee; 
    }   
} 

ответ

1

Вот почему вы получаете 0.0 каждый раз.

Вы указали public float fee;, который имеет значение по умолчанию 0.0.

В вашем методе getTotal() вы возвращаете fee - обратите внимание, что здесь вы возвращаете публичный взнос, указанный выше, и что вы никогда не изменяли его по умолчанию.

Проблема в вашем getTotal(). Основная проблема здесь в том, что у вас нет else после вашего заявления else if. Итак, что происходит, когда вы не выполняете первый оператор if, и вы не выполняете else, если? Ничего не происходит, и плата не меняется, поэтому вы получаете доход 0.0.

Решение:

public float getTotal(){ 

    if(pkg.equals("letter")) { 
     if(weight > 8) { 
      // quit early since it's too big 
      // do your system.out.print here 
      // return 8.8 since the size is too big; this is kind of 
      // like an error code 
      return 8.8; 
     } 

     if(service.equals("P")) { 
      // service is priority 
      fee = LETTER_PRIORITY; 
     } else { 
      // here, the service is not priority, so put the non priority letter calculations here 
     } 
    } else if (pkg.equals("box")) { 
     // do your box fee checks and calculations here 
    } else { 
     // the pkg is not a box or a letter - something is wrong, give fee 
     // a default value, for example 9.99 or whatever you want. 
     // make it something so that you KNOW that your pkg went into this 
     // loop and something went wrong 
     fee = 9.99; 
    } 
} 
Смежные вопросы