2

Java Problem Statement : 使用可能なプリンターのリストを持つコンピューター クラスを作成する方法。
問題文を満たすコンピュータ クラス (このようなもの) が必要です

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>

    }


}

例:

コンピュータ名 -- プリンタのリスト

HP -- HP プリンター、Samsung、Canon。

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);
    }

}

このクラスには、値を定義するためのコンストラクターと、値を取得するための 2 つの 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;
    }

}

コンストラクターは、コンピューターの名前を取ります。インスタンスが構築されると、コンピューターの名前を変更する方法はありません。

コンピューターにプリンターを追加したり、コンピューターから削除したりします。コンピューターにプリンターを追加する方法と、コンピューターからプリンターを削除する方法の 2 つが定義されています。

remove メソッドは、複数のプリンターが入力された場合に、プリンターのすべてのインスタンスを から削除しますList

プリンター リストを取得するメソッドは、 のインスタンスを返します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

Computer クラスを作成し、Computers クラスでコンピューター オブジェクト リストを維持します。パソコン教室はこんな感じ。

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 に答える