2

Java 问题陈述:如何使计算机类具有可用的打印机列表。
我想要一个完成问题陈述的计算机类(类似这样的)

public class Computers{


   String computername;

   //printerlist
   public static ArrayList<String> printers=new ArrayList<String>();

   // computername-Printerlist
   public Map<String,ArrayList<String>> printerDB=newHashMap<String,ArrayList<String>>();


    public Computers(String computername){

    this.computername=computername;

    // now what to put here so that each computer having a 
    // different computer name will have a list of printers available to it>

    }


}

例子:

Computername -- 打印机列表

惠普——惠普打印机、三星、佳能。

4

2 回答 2

3

首先,让我们定义一个 Printer 类。

package com.ggl.modeltest;

public class Printer {

    private String companyName;
    private String printerName;

    public Printer(String companyName, String printerName) {
        this.companyName = companyName;
        this.printerName = printerName;
    }

    public String getCompanyName() {
        return companyName;
    }

    public String getPrinterName() {
        return printerName;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((companyName == null) ? 0 : companyName.hashCode());
        result = prime * result
                + ((printerName == null) ? 0 : printerName.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Printer other = (Printer) obj;
        if (companyName == null) {
            if (other.companyName != null)
                return false;
        } else if (!companyName.equals(other.companyName))
            return false;
        if (printerName == null) {
            if (other.printerName != null)
                return false;
        } else if (!printerName.equals(other.printerName))
            return false;
        return true;
    }

    public Printer copy() {
        return new Printer(companyName, printerName);
    }

}

这个类有一个构造函数来定义值,以及两个 getter 方法来检索值。一旦你创建了这个类的一个实例,你就不能改变它。

这些类型的不可修改的类使调试更简单。

hashCode 和 equals 方法看起来很吓人。我让 Eclipse 为我生成了这些方法。我们重写这些方法的原因是我们将在Computer类中使用它们。

所以现在,我们定义Computer类。

package com.ggl.modeltest;

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

public class Computer {

    private List<Printer>   printerNames;

    private String          computerName;

    public Computer(String computerName) {
        this.computerName = computerName;
        this.printerNames = new ArrayList<Printer>();
    }

    public void addPrinter(Printer printerName) {
        this.printerNames.add(printerName);
    }

    public void removePrinter(Printer printerName) {
        for (int i = printerNames.size() - 1; i >= 0; i--) {
            if (printerNames.get(i).equals(printerName)) {
                printerNames.remove(i);
            }
        }
    }

    public List<Printer> getPrinterNames() {
        return printerNames;
    }

    public String getComputerName() {
        return computerName;
    }

}

构造函数采用计算机的名称。一旦构造了实例,就无法更改计算机的名称。

打印机被添加到计算机和从计算机中移除。定义了两种方法来将打印机添加到计算机和从计算机中删除打印机。

List如果输入了多个,则 remove 方法会从 中删除打印机的所有实例。

获取打印机列表的方法返回List. 调用程序可以更改此列表的内容。如果您想确保调用程序不能更改列表的内容,您可以对List.

要进行深层复制,您需要为Printer该类编写一个复制方法。

public Printer copy() {
    return new Printer(companyName, printerName);
}  

由于字符串是不可更改的,我们不必复制字符串。如果我们有可变的值,我们也必须复制它们。这就是为什么这被称为深拷贝。第一次正确复制所有内容可能很困难。这就是测试的目的。

getPrinterNames然后在类的方法中循环调用这个复制方法Computer

public List<Printer> getPrinterNames() {
    List<Printer> list = new ArrayList<Printer>();

    for (Printer printer : printerNames) {
        list.add(printer.copy());
    }

    return list;
}
于 2013-06-28T14:44:46.277 回答
0

创建您的计算机类并在计算机类中维护计算机对象列表。计算机课是这样的。

public class Computer{
   private  String computername;

   private ArrayList<String> printernames;

    public Computers(String computername,List<String> printernames){
    this.computername=computername;
    this.printernames=printernames;
    }

    //setters //gettters //


}

用法 :

String compname ="Apple";
List<String> printernames = new Arraylist<String>();
printernames.add("AplrPrinter1");
printernames.add("AplrPrinter2");
printernames.add("AplrPrinter3");
Computers comp = new Computers(compname,printernames);
于 2013-06-28T10:14:29.857 回答