gpt4 book ai didi

Java 程序语句 : How to make a computer class having a list of printers available to it

转载 作者:行者123 更新时间:2023-12-04 04:51:33 27 4
gpt4 key购买 nike

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>

}


}

示例:

计算机名称 -- 打印机列表

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

最佳答案

首先,让我们定义一个打印机类。

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

}

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

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

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

关于Java 程序语句 : How to make a computer class having a list of printers available to it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17362197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com