Java基础编程关于manages printers devices

根据图1,2的要求完成编码,然后运行图3中的代码,使其结果跟图4一样。

img

img

img

img




```import java.util.ArrayList;
public class DriverClass {
    public static void main(String[] args) {
        ArrayList<Printer> printers = new ArrayList<>();
        // add Laser and Inkjet printers the same ArrayList
        printers.add(new LaserPrinter("HP", "H1", 100));
        printers.add(new InkjetPrinter("Cannon", "C1", 150));
        printers.add(new LaserPrinter("DELL", "D1", 100));
        printers.add(new InkjetPrinter("HP", "H2", 50));
        // lets test printer 1
        //how many pages do we have
        System.out.println(printers.get(0));
        // send a task to printer 1 with 100 pages
        printers.get(0).printPages(100);
        // print number of pages the printer can print
        System.out.println(printers.get(0));
        // lets test printer 2
        System.out.println(printers.get(1));
        // send a task to printer 1 with 100 pages
        printers.get(1).printPages(50);
        // print number of pages the printer can print
        System.out.println(printers.get(1));
        // now lets send a big task to printer 3
        printers.get(2).printPages(5000); // rejected: no enough ink
        for (Printer printer : printers)
            System.out.printf("For printer %s-%s we have printed %d\n",printer.getMaker(),printer.getModel(),printer.getPrintedPageCount());
    }
}
import java.util.ArrayList;

interface IPrinter{
    int calculatePagesAvailable();
    void updateInkLevel(int nPages);
    void printPages(int nPages);
}
abstract class Printer implements IPrinter{
    String maker;
    String model;
    int printedPageCount; // the number of pages a printer ables to print

    public Printer(String maker, String model) {
        this.maker = maker;
        this.model = model;
        this.printedPageCount=0;
    }

    @Override // add the input to the printedPageCount
    public void printPages(int nPages) {
        this.printedPageCount += nPages;
    }
    public int getPrintedPageCount() {
        return printedPageCount;
    }
    @Override
    public String toString() {
        return "Printer{" +
                "maker=\'" + maker +
                "\', model=\'" + model +
                "\', pages Left=" + this.calculatePagesAvailable() +
                '}';
    }

    public   String getMaker(){ return this.maker;}

    public  String getModel(){ return this.model;}
}
class LaserPrinter extends Printer{
    double cartridgeSize;

    public LaserPrinter(String maker, String model, double cartridgeSize) {
        super(maker, model);
        this.cartridgeSize = cartridgeSize;
    }

    @Override
    public int calculatePagesAvailable() {
        return (int)(this.cartridgeSize/0.05);
    }

    @Override
    public void updateInkLevel(int nPages) {
        this.cartridgeSize -= (0.05*nPages);
    }

    @Override
    public void printPages(int nPages) {
        int availablePages = this.calculatePagesAvailable();
        if(availablePages>=nPages){
            super.printPages(nPages);
            updateInkLevel(nPages);
        }else{
            System.out.println("No enough ink for printer "+maker+"-"+model);
        }
    }
}
class InkjetPrinter extends Printer{
    double inkSize;

    public InkjetPrinter(String maker, String model,double inkSize) {
        super(maker, model);
        this.inkSize=inkSize;
    }

    @Override
    public int calculatePagesAvailable() {
        return (int)(this.inkSize/0.09);
    }

    @Override
    public void updateInkLevel(int nPages) {
        this.inkSize-=(0.09)*nPages;
    }

    @Override
    public void printPages(int nPages) {
        int availablePages = this.calculatePagesAvailable();
        if(availablePages>=nPages) {
            super.printPages(nPages);
            this.updateInkLevel(nPages);
        }else{
            System.out.println("No enough ink");
        }
    }
}


public class DriverClass {
    public static void main(String[] args) {
        ArrayList<Printer> printers = new ArrayList<>();
        // add Laser and Inkjet printers the same ArrayList
        printers.add(new LaserPrinter("HP", "H1", 100));
        printers.add(new InkjetPrinter("Cannon", "C1", 150));
        printers.add(new LaserPrinter("DELL", "D1", 100));
        printers.add(new InkjetPrinter("HP", "H2", 50));
        // lets test printer 1
        //how many pages do we have
        System.out.println(printers.get(0));
        // send a task to printer 1 with 100 pages
        printers.get(0).printPages(100);
        // print number of pages the printer can print
        System.out.println(printers.get(0));

        // lets test printer 2
        System.out.println(printers.get(1));
        // send a task to printer 1 with 100 pages
        printers.get(1).printPages(50);
        // print number of pages the printer can print
        System.out.println(printers.get(1));

        // now lets send a big task to printer 3
        printers.get(2).printPages(5000); // rejected: no enough ink
        for (Printer printer : printers)
            System.out.printf("For printer %s-%s we have printed %d\n", printer.getMaker(), printer.getModel(), printer.getPrintedPageCount());

    }
}

img