Модифицируйте общий массив по агрегации - PullRequest
0 голосов
/ 20 декабря 2018

Я создал класс Product, в котором инициализирован универсальный arrayList, и когда я устанавливаю Arraylist для ноутбуков и ArrayList для настольных компьютеров из основного класса, возникает проблема: если я добавляю 5 ноутбуков и затем добавляю 5 рабочих столов, 5 рабочих столов переходят на позициюиз 5 ноутбуков они не включаются после 5-го индекса. Они должны запускаться после окончания обработки данных ноутбука. Когда я печатаю ArrayList для ноутбука и настольный массив ArrayList методом getter, в классе поступают только данные Desktop ArrayList.

Извините за мой английский. Если вы не можете понять.

import java.util.ArrayList;

public class Main {public static void main(String[] args) {
        Products P1 = P1=new Products();

        Laptop L1= new Laptop(1,"Dell","XPS","i7|2.8GHZ|8th Gen",95000);
        Laptop L2= new Laptop(2,"HP","Probook","i5|2.4GHZ|7th Gen",85000);
        Laptop L3= new Laptop(3,"Lenovo","Ideapad","i7|2.6 GHZ|7th Gen",80000);
        Laptop L4= new Laptop(4,"Sony","Vaio","i5|2.2 GHZ|7th Gen",90000);
        Laptop L5= new Laptop(5,"Asus","Zenbook","i3|2.6 GHZ|6th Gen",75000);

        Desktop D1 = new Desktop(7,"i5-2.8GHZ","6th Gen","1 TB",16,40000);
        Desktop D2 = new Desktop(8,"i7-2.6GHZ","7th Gen","2 TB",32,85000);
        Desktop D3 = new Desktop(9,"i5-8500","8th Gen","3 TB",16,90000);
        Desktop D4 = new Desktop(10,"i7-7800","7th Gen","1 TB",16,75000);
        Desktop D5 = new Desktop(11,"i3-8350","8th Gen","1 TB",32,65000);

        ArrayList<Laptop> laptop = new ArrayList<Laptop>();

        laptop.add(L1);
        laptop.add(L2);
        laptop.add(L3);
        laptop.add(L4);
        laptop.add(L5);
        laptop.add(L6);

        ArrayList<Desktop> desktop = new ArrayList<Desktop>();
        desktop.add(D1);
        desktop.add(D2);
        desktop.add(D3);
        desktop.add(D4);
        desktop.add(D5);        

        for(int i = 0; i<laptop.size(); i++){
            P1.setProduct(laptop);
        }
        for( int j=0;j<desktop.size();j++){
            P1.setProduct(desktop);
        }
        P1.specifyCategory();
    }
}

И

import java.util.ArrayList;
import java.util.Scanner;

public class Products<T> extends Category{
        private ArrayList<T> product;

    public Products() {
    }

    Products(ArrayList<T> product) {
        this.product.addAll(product);
    }

    void specifyCategory(){
        super.categories();
        Scanner input4 = new Scanner(System.in);
        System.out.println("\t\t\t\t\t\t\tChoose\n\t\t\t\t\t\t\t 1 for Laptop\n\t\t\t\t\t\t\t 2 for Desktop\n\t\t\t\t\t\t\t 3 for Accessories\n\t\t\t\t\t\t\t 4 for Services\n\t\t\t\t\t\t\t 5 for Contact Us");
        int no=input4.nextInt();
        if(no==1){
            System.out.println("\t\t\t\t\t\t\t*\t\t\t\t\t\t\t\t\t1.Laptop\t\t\t\t\t\t\t\t\t\t\t*");
            System.out.println(getLaptop());
        }
        else if(no==2){
            System.out.println("\t\t\t\t\t\t\t*\t\t\t\t\t\t\t\t\t2.Desktops\t\t\t\t\t\t\t\t\t\t\t*");
//
            System.out.println(getDesktop());
        }
        else if(no==3){
            System.out.println("\t\t\t\t\t\t\t*\t\t\t\t\t\t\t\t\t3.Accessories\t\t\t\t\t\t\t\t\t\t*");
           // addAccessoriesInventory();
        }
        else if(no==4){
            System.out.println("\t\t\t\t\t\t\t*\t\t\t\t\t\t\t\t\t5.Services    \t\t\t\t\t\t\t\t\t\t\t*");
        }
        else if(no==5){
            System.out.println("\t\t\t\t\t\t\t*\t\t\t\t\t\t\t\t\t6.Contact Us\t\t\t\t\t\t\t\t\t\t*");
        }
        else{
            System.out.println("You have entered incorrect option");
            specifyCategory();
        }
    }  

    public ArrayList<Laptop> getLaptop(){
        return (ArrayList<Laptop>) this.product;
    }

    public ArrayList<Desktop> getDesktop(){
        return (ArrayList<Desktop>) this.product;
    }

    public void setProduct(ArrayList<T> product) {
        this.product = product;
    }
}

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

@ Zash - это только один пример того, как вы можете хранить все продукты.

Чтобы хранить все настольные компьютеры и ноутбуки в одном списке продуктов, вам нужно, чтобы классы настольных компьютеров и ноутбуков совместно использовалиподкласс или интерфейс.Обычно лучше отдавать предпочтение интерфейсам подклассам, поэтому вот пример, который делает это.

public interface Product {

    String getDescription();

}

Классы для настольных компьютеров и ноутбуков

public class Desktop implements Product {

    private String description;

    public Desktop(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

}

public class Laptop implements Product {

    private String description;

    public Laptop(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

Класс продуктов для хранения всех настольных и портативных компьютеров, а такжеразрешить получение их списка

import java.util.ArrayList;
import java.util.List;

public class Products {

    List<Product> products = new ArrayList<>();

    public void addProduct(Product product) {
        products.add(product);
    }

    public List<Product> getProductsOfType(Class productType) {
        List<Product> productsOfType = new ArrayList<Product>();
        for (Product product : products) {
            if (productType.isInstance(product)) {
                productsOfType.add(product);
            }
        }
        return productsOfType;
    }

}

Основной класс, который использует вышеуказанный

public class Main {

    public static void main(String[] args) {
        Products products = new Products();

        products.addProduct(new Laptop("Dell XPS i7|2.8GHZ|8th Gen"));
        products.addProduct(new Laptop("HP Probook i5|2.4GHZ|7th Gen"));

        products.addProduct(new Desktop("i5-2.8GHZ 6th Gen 1 TB"));
        products.addProduct(new Desktop("i7-2.6GHZ 7th Gen 2 TB"));

        System.out.println("Desktops : ");
        for (Product desktop : products.getProductsOfType(Desktop.class)) {
            System.out.println(desktop.getDescription());
        }

        System.out.println("Laptops : ");
        for (Product laptop : products.getProductsOfType(Laptop.class)) {
            System.out.println(laptop.getDescription());
        }

    }

}
0 голосов
/ 21 декабря 2018

Я добавил несколько комментариев в части вашего кода, скопированные ниже, надеюсь, это поможет показать, что происходит.Ваша логика в основном

  • Добавить 5 ноутбуков в список
  • Добавить 5 рабочих столов в другой список
  • Заменить список продуктов списком ноутбуков (сделать это 5 раз)
  • Замените список продуктов списком рабочих столов (сделайте это 5 раз)
  • Конечный результат - список продуктов содержит список рабочих столов.

ВГлавное у вас есть

    // Create a laptop ArrayList and add 5 Laptops
    ArrayList<Laptop> laptop = new ArrayList<Laptop>();

    laptop.add(L1);
    laptop.add(L2);
    laptop.add(L3);
    laptop.add(L4);
    laptop.add(L5);
    laptop.add(L6);

    // Create a desktop ArrayList and add 5 Desktops
    ArrayList<Desktop> desktop = new ArrayList<Desktop>();
    desktop.add(D1);
    desktop.add(D2);
    desktop.add(D3);
    desktop.add(D4);
    desktop.add(D5);        

    // Loop 5 times
    for(int i = 0; i<laptop.size(); i++){
        // pass the laptop arraylist to P1.setProduct method
        // The setProduct method replaces the current product list with whatever you pass in
        P1.setProduct(laptop);
    }
    // loop 5 times
    for( int j=0;j<desktop.size();j++){
        // pass the desktop arraylist to P1.setProduct method
        // The setProduct method replaces the current product list with whatever you pass in
        P1.setProduct(desktop);
    }

В продукте у вас есть

public void setProduct(ArrayList<T> product) {
    this.product = product;
}
...