Java - вызов методов из других классов с вычисляемыми полями

Таким образом, я просматривал этот кусок кода весь день и не вижу ошибок. Вот что я должен сделать:

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

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

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

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

  • Четырехзначный год с 2001 по 2025 год включительно
  • Номер доставки за год от 1 до 9999 включительно
  • Вес упаковки от 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);

    }

}

Поэтому я внёс изменения, которые вы, ребята, предложили, но теперь я не могу брать плату с класса доставки. Какие-нибудь мысли?

3 ответа

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

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 объект.

или мы можем сделать это просто как класс доставки

      public class Delivery {
private int year,deliveryNumber,distanceCode;
private double weight;
private double fees=0;

//delivery class constructor
public Delivery(int year,int deliveryNumber,int distanceCode,double weight)
{
    this.year=year;
    this.deliveryNumber=deliveryNumber;
    this.distanceCode=distanceCode;
    this.weight=weight;
}    
//calculate  delivery fee
public void displayFees(int distanceCode, double weight)
{
    if(distanceCode == 1)
        {
        if(weight<5)
        {
            fees = 12;
        }
        else if((weight < 20)&&(weight >=5))
        {
            fees = 16.50;
        }
        else if(weight > 20)
        {
            fees = 22;
        }
    }
    else if(distanceCode == 2)
    {
        if(weight <5)
        {
            fees = 35;
        }
        else if(weight >= 5)
        {
            fees = 47.95;
        }
    }
}
public double getFee()
{
    return fees;
}

}

и класс CreateDelivery:

      public class CreateDelivery {

public static void main(String[] args) {
            

    int year=(int)ReadValues.readValue("Year", 1999,2026);
    int deliveryNumber=(int)ReadValues.readValue("Delivery Number (1 to 10000)", 0,10000);
    int distanceCode=(int)ReadValues.readValue("DistanceCode (1 or 2)",0, 3);
    double weight=ReadValues.readValue("weight",0, 20);

    Delivery delivery=new Delivery(year, deliveryNumber, distanceCode, weight);
    delivery.displayFees(distanceCode, weight);
    double fee=delivery.getFee();

    System.out.println("\n\n*****Delivery Fees Details*****\n\nTrackingNumber:"+year+deliveryNumber+"\nDistanceCode:"+distanceCode+"\nFee :"+fee);
}

}

а для чтения значений от пользователя другой класс с именем ReadValue

      import java.util.Scanner;

public class ReadValues ​​{

      public static double readValue(String prompt, int min, int max) {
    Scanner scan = new Scanner(System.in);
    double value;
    System.out.print(prompt + " :");
    while (true) {
        value = scan.nextDouble();
        if (value < min || value > max)
            System.out.println("Enter value between " + min + " & " + max);
        else
            break;
    }
    return value;
}

}

Другие вопросы по тегам