gpt4 book ai didi

java - 多态性和预验证类属性

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:00 25 4
gpt4 key购买 nike

基本上我的任务是处理以下场景:

当您设计类时,您必须决定要包含哪些属性和方法。例如,如果您决定以毫米为单位,则您的 size 变量(长度)可以是整数类型(但稍后,在计算成本时,您必须将体积转换为平方英寸,因为成本是按每立方英寸塑料给出的(类(class)作业的表 2 和表 3))。所使用的塑料 Material 的体积将是管道的外部体积和内部体积之间的差值。如果您决定以米为单位提示长度,则类型应为 double 或 float 等。
验证用户订单后,您的程序应根据表 1 确定订购的管道的类型。
表 1. 可用的塑料管道类型。

Type Plastic’s grade    Colour print    Inner insulation    Outer reinforcement Chemical resistance
0 1 2
I 1 – 3 YES NO NO NO NO YES/NO
II 2 – 4 NO YES NO NO NO YES/NO
III 2 – 5 NO NO YES NO NO YES/NO
IV 2 – 5 NO NO YES YES NO YES/NO
V 3 – 5 NO NO YES YES YES YES/NO

这一切都很好,但让我着迷的部分是这里:

假设在你的主类中你已经确定客户的订单是类型 I 的管道,那么你可以创建一个 TypeI 的对象,并且对于这个对象你可以调用 cost() 方法来计算成本并将其显示给用户。

它基本上要求在确定需要实例化哪个对象之前不要实例化任何对象,当它将验证中的大 if 语句分类为“暴力方法”时,这很困难。

这是我到目前为止所拥有的。

主要

public class Cw1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ArrayList<Pipe> pipeList = new ArrayList<Pipe>();
// TODO code application logic here
Grade g1 = new Grade(1,3,true,false,false,false,false);
Grade g2 = new Grade(2,4,false,true,false,false,false);
Grade g3 = new Grade(2,5,false,false,true,false,false);
Grade g4 = new Grade(2,5,false,false,true,true,false);
Grade g5 = new Grade(3,5,false,false,true,true,true);
pipeList.add(g1);
pipeList.add(g2);
pipeList.add(g3);
pipeList.add(g4);
pipeList.add(g5);

for (Pipe p: pipeList)
{
p.setGrade(1);
p.setColour0(false);
p.setColour1(false);
p.setColour2(true);
p.setIns(true);
p.setReinf(true);
p.validate();
}
}
}

成绩(答案中必须有摘要)

public class Grade extends Pipe {

public Grade(int minGrade, int maxGrade, boolean hasColour0, boolean hasColour1, boolean hasColour2, boolean hasIns, boolean hasReinf) {
super(minGrade, maxGrade, hasColour0, hasColour1, hasColour2, hasIns, hasReinf);
}


}

和管道

public abstract class Pipe {

public boolean isChemRes() {
return chemRes;
}

public void setChemRes(boolean chemRes) {
this.chemRes = chemRes;
}

public boolean isColour0() {
return colour0;
}

public void setColour0(boolean colour0) {
this.colour0 = colour0;
}

public boolean isColour1() {
return colour1;
}

public void setColour1(boolean colour1) {
this.colour1 = colour1;
}

public boolean isColour2() {
return colour2;
}

public void setColour2(boolean colour2) {
this.colour2 = colour2;
}

public double getDiameter() {
return diameter;
}

public void setDiameter(double diameter) {
this.diameter = diameter;
}

public boolean isIns() {
return ins;
}

public void setIns(boolean ins) {
this.ins = ins;
}

public double getLength() {
return length;
}

public void setLength(double length) {
this.length = length;
}

public boolean isReinf() {
return reinf;
}

public void setReinf(boolean reinf) {
this.reinf = reinf;
}

public Pipe(int minGrade, int maxGrade, boolean hasColour0, boolean hasColour1, boolean hasColour2, boolean hasIns, boolean hasReinf) {
this.minGrade = minGrade;
this.maxGrade = maxGrade;
this.hasColour0 = hasColour0;
this.hasColour1 = hasColour1;
this.hasColour2 = hasColour2;
this.hasIns = hasIns;
this.hasReinf = hasReinf;
}



public Pipe() {
}
//<editor-fold desc="Class variables">
private int grade;
private double length, diameter;
private boolean colour0, colour1, colour2, ins, reinf, chemRes;
private int minGrade, maxGrade;
private boolean hasColour0, hasColour1, hasColour2, hasIns, hasReinf;
// </editor-fold>
public int getGrade() {
return grade;
}

public void setGrade(int grade) {
this.grade = grade;
}
//<editor-fold desc="Public Methods">

public double calcVol()
{
return 0;
}

public double calcCost()
{
return 0;
}
public void validate()
{
if ((grade >= minGrade && grade <= maxGrade) & (colour0 == true && hasColour0 || colour1 == true && hasColour1 || colour2 == true && hasColour2) && (ins == hasIns) && (reinf == hasReinf))
{
System.out.print("True");
}
else
{
System.out.print("False");
}
}
// </editor-fold>

}

所以基本上,我不明白如何在不事先实例化对象并验证它们的情况下实现相同的结果?

这个类(class)水平不高,我们才刚刚学会多态。

最佳答案

通常,告诉您要创建哪些对象的数据来自外部源:文件、套接字、另一个对象等。在您的情况下,您可以使用文本文件。创建 Grade 实例,将读取的值传递给构造函数,然后对每个实例调用 validatecost

public class PipeFactory(){
public Pipe CreatePipe( int minGrade, int maxGrade, boolean hasColour0, boolean hasColour1, boolean hasColour2, boolean hasIns, boolean hasReinf ){
if( (minGrade == 1 || maxGrade == 3) /* ... Complete this condition yourself */ )
return new TypeIPipe();
if( (minGrade == 2 || maxGrade == 4 /* ... Complete this condition yourself */ )
return new TypeIIPipe();
//If for other types...
//If no pipe was created, parameters are invalid, so we throw an exception
throw new InvalidArgumentException( "Can't create a pipe with these parameters" );
}
}

关于java - 多态性和预验证类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314699/

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