2013-06-23 3 views
-1

Итак, я просматривал этот кусок кода весь день, и я не вижу ошибок. Вот что я должен делать:Java - методы вызова из других классов с вычисленными полями

Создайте класс Delivery для службы доставки. Класс содержит следующие поля:

  • Номер доставки, который содержит восемь цифр. Первые четыре цифры представляют год, а последние четыре цифры представляют собой номер доставки.
  • Код, представляющий область доставки. Местная доставка - код 1, а доставка на большие расстояния - код 2.
  • Вес, в фунтах, предмета, который будет доставлен.
  • Плата за доставку, следующим образом:

Создать конструктор для Delivery класса, который принимает аргументы за год, номер поставки в течение года, доставка кода расстояния и веса упаковки. Конструктор определяет восьмизначный номер доставки и плату за доставку. Также включите метод , который отображает каждое поле объекта Delivery. Сохраните файл как Delivery.java.

Затем создайте приложение, предлагающее пользователю данные для доставки. Держите запрашивая пользователя для каждого из следующих значений, пока они не действительны:

  • Четырехзначное год в период с 2001 по 2025 год включительно
  • Ряд поставки в течение года от 1 до 9999 включительно
  • A вес пакета от 0,10 фунта до 100 фунтов включительно
  • Подающего расстояние код, либо 1 или 2

Когда все записи данных достоверны, построить Delivery, а затем отобразите его значения . Сохраните файл как CreateDelivery.java.

Так вот моя доставка Класс

import javax.swing.*; 
import java.util.*; 


class Delivery 
{ 
    //variables 
    private int year; 
    private int deliveryNumber; //deliveryNo 
    private double weight; 
    private int distanceCode; //code 

     //constructor 
     //Delivery() 
     //{ 
     // year = year; 
     // deliveryNumber = deliveryNumber; 
     // weight = weight; 
     // distanceCode = distanceCode; 
     //} 

    //get year 
    public int getYear() 
    { 
     return year; 
    } 
    //set year 
    public int setYear (int newYear) 
    { 
     year = newYear; 
     return year; 
    } 

    //get deliveryNumber 
    public int getDeliveryNumber() 
    { 
     return deliveryNumber; 
    } 
    //set deliveryNumber 
    public int setDeliveryNumber (int newDeliveryNumber) 
    { 
     deliveryNumber = newDeliveryNumber; 
     return deliveryNumber; 
    } 

    //get weight 
    public double getWeight() 
    { 
     return weight; 
    } 
    //set Weight 
    public double setWeight (double newWeight) 
    { 
     weight = newWeight; 
     return weight; 
    } 


    //get distanceCode 
    public int getDistanceCode() 
    { 
     return distanceCode; 
    } 
    //set distanceCode 
    public int setDistanceCode (int newDistanceCode) 
    { 
     distanceCode = newDistanceCode; 
     return distanceCode; 
    } 

    //calculate fee 
    public double displayFees(int distance, double w) //distance = c 
    { 
     double fees = 0; 

    if(distance == 1) 
    { 
      if(w < 5) 
     { 
      fees = 12; 
     } 
     else if((w < 20)&&(w > 5)) 
     { 
      fees = 16.50; 
     } 
     else if(w > 20) 
     { 
      fees = 22; 
     } 
    } 
    else if(distance == 2) 
    { 
     if(w < 5) 
     { 
      fees = 35; 
     } 
     else if(w >= 5) 
     { 
      fees = 47.95; 
     } 
    } 
     return fees; 
    } 

    //display method 
    public void display(int year, int deliveryNumber, double weight, int distanceCode) 
     { 
     System.out.println("Year: " + year + '\n' 
      + "Delivery Number: " + deliveryNumber + '\n' 
      + "Weight of the package: " + weight + '\n' 
      + "Delivery code: " + distanceCode); 
     } 
} 

А вот мой CreateDelivery Класс

import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class CreateDelivery 
    { 
     public static void main(String []args) 

     { 

      Delivery delivery1 = new Delivery(); 

      //scanner year 
      Scanner input = new Scanner(System.in); 
      System.out.print("Please enter the current year, format (yyyy) >>> "); 
      delivery1.setYear(input.nextInt()); 

      //loop year 
        while((delivery1.getYear() <= 2000)||(delivery1.getYear() >= 2026)) 
        { 
         System.out.println('\n'+ "Error, year should be in the range of (2010 - 2025). Please enter a valid option >> "); 
         delivery1.setYear(input.nextInt()); 
        } 

      //scanner for delivery number 
      System.out.print('\n'+ "Please enter a delivery number: "); 
      delivery1.setDeliveryNumber(input.nextInt()); 

      //loop for delivery number 
        while((delivery1.getDeliveryNumber() <= 0001)||(delivery1.getDeliveryNumber() >= 10000)) 
        { 
         System.out.println("Error, the delivery number is a 4 digit number between 0001 and 9999, please enter a valid option >> "); 
         delivery1.setDeliveryNumber(input.nextInt()); 
        } 

      //scanner for weight 
      System.out.print("Please enter the weight of the package (in pounds): "); 
      delivery1.setWeight(input.nextDouble()); 

        //loop for weight 
        while((delivery1.getWeight() <= .09)||(delivery1.getWeight() >= 101)) 
        { 
         System.out.println("Error, the minimum allowed weight is 0.10 pounds and the maximum is 100 pounds. Please enter a valid weight >> "); 
         delivery1.setWeight(input.nextDouble()); 
        } 

      //scanner for delivery code 
      System.out.print("Please enter 1 for local or 2 for long distance deliveries >> "); 
      delivery1.setDistanceCode(input.nextInt()); 

        //loop for delivery code 
        while((delivery1.getDistanceCode() == 1) && (delivery1.getDistanceCode() == 2)) 
        { 
         System.out.println("Error, please enter a valid distance code (1 for local deliveries and 2 for long distance deliveries) >> "); 
         delivery1.setDistanceCode(input.nextInt()); 
        } 

      //turn int to string 
      String n = Integer.toString(delivery1.getDeliveryNumber()); 
      String y = Integer.toString(delivery1.getYear()); 

      String trackingNumber = n + y; 
      System.out.println(delivery1.getDistanceCode() + " " 
      + trackingNumber + " " + delivery1.getWeight() + " " + fees); 

    } 

} 

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

+0

С какой ошибкой вы столкнулись? –

+0

Являются ли 'Доставка' и' CreateDelivery' в том же пакете? – Genzer

+0

// сканер для дистанционного кода \t \t \t System.out.print («Пожалуйста, введите 1 для местных поставок и 2 для дальних перевозок >>»); \t \t \t доставка1.setDistanceCode (input.nextInt()); \t \t \t \t \t \t \t \t // петля для кода доставки \t \t \t \t \t в то время как (((delivery1.getDistanceCode() <= 1) || (delivery1.getDistanceCode()> = 2))) \t \t \t \t \t { \t \t \t \t \t \t System.out.println ("Ошибка, пожалуйста, введите код расстояния (1 для местных поставок и 2 для доставки на большие расстояния) >> "); \t \t \t \t \t \t доставка1.setDistanceCode (input.nextInt()); \t \t \t \t \t} –

ответ

1
Delivery() 
    { 
     year = year; 
     deliveryNumber = deliveryNumber; 
     weight = weight; 
     distanceCode = distanceCode; 
    } 

Заменить его с чем-то вдоль линий:

Delivery(int year, int deliveryNumber, int weight, int distanceCode) 
    { 
     this.year = year; 
     this.deliveryNumber = deliveryNumber; 
     this.weight = weight; 
     this.distanceCode = distanceCode; 
    } 

Оттуда, я бы избежать использования set методов. Вместо этого сохраните все значения в соответствующие поля при их загрузке из System.in. Когда у вас есть все поля, создайте объект Delivery.

+0

Я попросил установить конструктор в классе доставки, хотя. –

+0

Да, я исправил это. –

+0

? Избегайте заданных методов? Итак, вы предлагаете нам отказаться от базового принципа OO? Хотя я могу объяснить, почему вы могли бы предложить его на таком маленьком примере, цель вопроса - научить студентов соответствующим парадигмам. И не знаю, где этот вопрос может привести к тому, что я (лично) нахожу это внушающее беспокойство – MadProgrammer

1

Я думаю, что вам не хватает () в конце методов, таких как getDeliveryNumber, getYear и т. Д. В цикле while. , и вы также используете необъявленные переменные в конце, такие как getDeliveryNumber, getYear и т. Д.

+0

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

+0

, пожалуйста, удалите '=' знак из вашего обоих условий в цикле while –

+0

@ClaudiaBenitezdeArmstrong your условие должно быть 'while (delivery1.getDistanceCode() <1 || delivery1.getDistanceCode()> 2)' –