我已经发布了一个UML图,用于分配解码给定电阻器的色带并返回一个字符串,该字符串返回以欧姆为单位的电阻及其容差。
我在继承层次结构上有些挣扎,在教授的问题描述中,LookupTable类是带有抽象get()方法的抽象类。 NumberLookup和ToleranceLookup类扩展了LookupTable类,而MultiplierLookup类扩展了NumberLookup类。
我想我最难以概念化的是MultiplierLookup类是否应该扩展LookupTable类或NumberLookup类。
这是具体的问题描述:
ResistorDecoder对象将是Program.java用来将颜色数组转换为对人类友好的字符串的对象。 ResistorDecoder将需要几种不同类型的查找表,具体取决于我们是从颜色还是从数值中查找String。 LookupTable对象是一个抽象类,因为它包含抽象方法get()。 ToleranceLookup对象采用一种颜色并返回一个字符串,该字符串是公差字符串(例如±5%)。 NumberLookup对象采用一种颜色,可以返回String,但也可以返回Double。由于我们正在扩展LookupTable对象(它之前没有返回双精度值的能力),因此我们需要从LookupTable对象继承。 MultiplierLookup对象的工作方式与NumberLookup对象的工作方式类似,但内部查找表不同。因此,即使我们不需要添加任何方法,也需要从NumberLookup表继承。提示:可以使MultiplierLookup使用NumberLookup的getDouble行为来简化其职责吗?
到目前为止,我已经尝试如下创建各种类/子类:
LookupTable.java
/**
* abstract class with abstract method get()
*
*
*/
public abstract class LookupTable {
/**
*
* abstract class with abstract get method that has no implementation defined, behavior is defined in subclasses
*
* @param color
* @return
*/
abstract String get(String color);
}
NumberLookup.java
public class NumberLookup extends LookupTable {
private HashMap<String, String> numberTable = new HashMap<>();
String get(String color) { // abstract method implementation
return color;
}
public NumberLookup() {
String[] colors = { "Silver", "Gold", "Black", "Brown", "Red", "Orange", "Yellow", "Green", "Blue", "Violet",
"Gray", "White" };
for (String color : colors) {
for (int i = 0; i <= 9; i++) {
numberTable.put(color, (i));
}
}
// constructor
}
/**
*
* @param color
* @return the corresponding
*/
public double getDouble(String color) { // new method
return (numberTable.get(color));
}
}
ToleranceLookup.java
/**
* intakes a color and returns a String that is the tolerance String ex.( (+/-
* 5%))
*
* adds the OHM symbol and tolerance to the end of the final string to be
* printer
*/
public class ToleranceLookup extends LookupTable {
/**
*
* default empty constructor
*/
public ToleranceLookup() {
}
/**
*
* @param color band as a string
* @return the Ohm and tolerance suffix
*/
public String get(String color) {
switch (color) {
case "Black":
return "\u03A9";
case "Brown":
return ("\u03A9, \u00B1" + "1%");
case "Red":
return ("\u03A9, \u00B1" + "2%");
case "Orange":
return ("\u03A9");
case "Yellow":
return ("\u03A9, \u00B1" + "5%");
case "Green":
return ("\u03A9, \u00B1" + ".5%");
case "Blue":
return ("\u03A9, \u00B1" + ".25%");
case "Violet":
return ("\u03A9, \u00B1" + ".1%");
case "Gray":
return ("\u03A9, \u00B1" + "10%");
case "White":
return ("\u03A9");
case "Gold":
return ("\u03A9, \u00B1" + "5%");
case "Silver":
return ("\u03A9, \u00B1" + "10%");
case "None":
return ("\u03A9, \u00B1" + "20%");
default:
return null;
}
}
}
MultiplierLookup.java
/**
* inherits from the NumberLookup object but no methods need to be added.
*
* Internal lookup table is different
*
*
*/
public class MultiplierLookup extends NumberLookup {
private HashMap<String, Double> multiplier = new HashMap<>();
String get(String color) {
return color;
}
public MultiplierLookup() {// constructor
String[] colors = new String[] { "Silver", "Gold", "Black", "Brown", "Red", "Orange", "Yellow", "Green", "Blue",
"Violet", "Gray", "White" };
for (String color : colors) {
int j = -2;
while (j <= 9) {
multiplier.put(color, (Double.toString(Math.pow(10, j)));
j++;
}
}
}
public Double getDouble(String color) { // returns a double value
return multiplier.get(color);
}
}
我知道到目前为止代码中存在一些错误,并且我想我大部分时候都知道如何解决这些错误,但是我真的是OOP和相关/相关类的新手。尽管我了解继承的基本原理,但是我不确定如何使MultiplierLookup类从NumberLookup和LookupTable继承。抱歉,这个问题太冗长或太基本了,但是我花了很多时间浏览本网站上的所有作业,并且在这里的输入字面值是非常宝贵的,所以我认为这是转向的最佳选择。
我绝不希望任何人为我完成此代码,而我真的很喜欢解决问题,但是我认为,以具体示例向我解释这些概念将是有益的。预先谢谢你!
此外,由于它依赖于子类,因此我还没有构造ResistorDecoder类。但这主要是根据其他类的信息来组成一个字符串。