创建一个名为HeadPhone的Java类来表示耳机集。该课程包括:
创建至少构造3个TestHeadPhone对象的HeadPhone类。对于每个构造的对象,演示每个方法的使用。
这是我目前所拥有的..。
import java.awt.Color;
public class HeadPhones {
public static final int LOW = 1;
public static final int MEDIUM = 2;
public static final int HIGH = 3;
private int volume;
private boolean pluggedIn;
private String manufacturer;
private Color headPhoneColor;
public HeadPhones() {
volume = MEDIUM;
pluggedIn = false;
manufacturer = "";
headPhoneColor = Color.BLACK;
}
/**
*
* @return volume of headphone
*/
public int getVolume() {
return volume;
}
/**
* set volume of headphone
*
* @param volume
*/
public void setVolume(int volume) {
this.volume = volume;
}
/**
*
* @return true if the headphone is plugged in, false otherwise
*/
public boolean getPluggedIn() {
return pluggedIn;
}
/**
* set plugged in
*
* @param pluggedIn
*/
public void setPluggedIn(boolean pluggedIn) {
this.pluggedIn = pluggedIn;
}
/**
*
* @return manufacturer
*/
public String getManufacturer() {
return manufacturer;
}
/**
* set manufacturer
*
* @param manufacturer
*/
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
/**
*
* @return headphone color
*/
public Color getHeadPhoneColor() {
return headPhoneColor;
}
public String getColorName() {
String colorName = "Black";
if (headPhoneColor == Color.BLACK || headPhoneColor == Color.black) {
colorName = "Black";
} else if (headPhoneColor == Color.WHITE || headPhoneColor == Color.white) {
colorName = "White";
} else if (headPhoneColor == Color.RED || headPhoneColor == Color.red) {
colorName = "Red";
} else if (headPhoneColor == Color.PINK || headPhoneColor == Color.pink) {
colorName = "Pink";
} else if (headPhoneColor == Color.CYAN || headPhoneColor == Color.cyan) {
colorName = "Cyan";
} else if (headPhoneColor == Color.BLUE || headPhoneColor == Color.blue) {
colorName = "Blue";
} else if (headPhoneColor == Color.GREEN || headPhoneColor == Color.green) {
colorName = "Green";
} else if (headPhoneColor == Color.GRAY || headPhoneColor == Color.gray) {
colorName = "Gray";
}
return colorName;
}
/**
* set headphone color
*
* @param headPhoneColor
*/
public void setHeadPhoneColor(Color headPhoneColor) {
this.headPhoneColor = headPhoneColor;
}
/**
* returns a string describing the current field values of the headphone
*/
public String toString() {
StringBuilder s = new StringBuilder("(");
s.append("manufacturer = ").append(manufacturer).append(", ");
s.append("volumne = ").append(volume).append(", ");
s.append("plugged in = ").append(pluggedIn).append(", ");
s.append("color = ").append(getColorName()).append(")");
return s.toString();
}
}这是我的考试课..。
import java.awt.Color;
public class TestHeadPhones {
public static void main(String[] args) {
HeadPhones[] headphones = new HeadPhones[3];
headphones[0] = new HeadPhones();
headphones[0].setHeadPhoneColor(Color.CYAN);
headphones[0].setManufacturer("Thinksound");
headphones[1] = new HeadPhones();
headphones[1].setManufacturer("Monster");
headphones[1].setHeadPhoneColor(Color.white);
headphones[1].setPluggedIn(true);
headphones[1].setVolume(HeadPhones.HIGH);
headphones[2] = new HeadPhones();
headphones[2].setManufacturer("Sennheiser");
headphones[2].setHeadPhoneColor(Color.ORANGE);
headphones[2].setPluggedIn(true);
headphones[2].setVolume(HeadPhones.LOW);
for (int i = 0; i < 3; i++) {
System.out.println("Headphone #" + (i + 1));
System.out.println("toString() results: " + headphones[i]);
System.out.println("getVolume() results: " + headphones[i].getVolume());
System.out.println("getPluggedIn() results: " + headphones[i].getPluggedIn());
System.out.println("getManufacturer() results: " + headphones[i].getManufacturer());
System.out.println("getHeadPhoneColor() results: " + headphones[i].getColorName() + "\n");
}
}
}发布于 2018-09-14 21:48:39
因为这个类的大多数都是getter和setter,所以没有什么可评论的内容。
我看到的最大问题是getColorName方法。它正在进行不必要的检查,而且我通常会在这种情况下使用Map。对此,地图查找速度更快,而且在我看来更整洁一些。在这种情况下,看起来应该是:
Map<Color, String> colorToName = new HashMap<>();
colorToName.put(Color.BLACK, "Black");
colorToName.put(Color.WHITE, "White");
colorToName.put(Color.PINK, "Pink");
colorToName.put(Color.CYAN, "Cyan");
colorToName.put(Color.BLUE, "Blue");
colorToName.put(Color.GREEN, "Green");
colorToName.put(Color.GRAY, "Gray");然后,为了得到这个名字,你可以:
colorToName.get(Color.PINK); // Returns "Pink"您可能希望将colorToName初始化为类的静态成员,这样就不会不断地重新创建它。
注意我是如何忽略小写变体的。那是因为,如果你看看来源:
/**
* The color pink. In the default sRGB space.
*/
public final static Color pink = new Color(255, 175, 175);
/**
* The color pink. In the default sRGB space.
* @since 1.4
*/
public final static Color PINK = pink;它们指的是同一件事,所以检查两者都是多余的。
发布于 2018-09-14 22:10:17
这是一个非常简单的练习,你做得很好。
对需求的批评(不是您的代码):
headPhoneColor和headPhoneModel是冗长和冗余的。为什么不只是color和model呢?changeVolume(value)而不是setVolume(value)?我认为你的setVolume(value)更好。对您的代码的批评:
getPluggedIn()是一个返回boolean的谓词。按照惯例,它应该被称为isPluggedIn()。setVolume(volume)中执行一些验证并在需要时抛出一个IllegalArgumentException可能是个好主意。getColorName()函数可能需要一些工作。String colorName = "Black"分配是多余的,因此应该避免。有趣的是,Color.toString()文档说您不应该依赖它,但我还是会使用它作为后盾,因为可以在预定义的调色板之外创建颜色。switch块可以工作:公共字符串getColorName() { switch (this.headPhoneColor) { case Color.BLACK: case Color.black:返回"Black";case Color.WHITE: case Color.white:返回"White";…默认值:返回this.headPhoneColor.toString();}toString()中,"volumne“是一个拼写错误。发布于 2018-10-15 03:31:52
您的代码看起来不错,但是需求看起来相当过时。
自2004年9月以来,像示例中的卷这样的符号常量不再定义为int,而是定义为enum:
public enum Volume {
OFF, LOW, MEDIUM, HIGH
}使用枚举比int更安全,因为类的用户不能意外地将卷设置为-17或12345。唯一无效的值是null,您可以很容易地防御它:
public void setVolume(Volume volume) {
this.volume = Objects.requireNotNull(volume);
}在您的代码中,您已经为一些方法编写了Javadoc注释/** … */。对于代码的任何读者来说,注释都是很重要的。注释应该包含通过查看方法的定义而无法轻易看到的所有细节。
当前,您的注释仅重复方法定义中的单词。这个信息是无用的,应该删除。相反,在setVolume(int)的注释中,您应该提到只有低、中和高的值是允许的,以及当有人用无效的值调用该方法时会发生什么。
在您了解if和throw语句之前,评论应该只说“不要那样做”。在一些星期内,您应该为无效的值抛出一个异常,并相应地更新注释。
您的toString方法现在看起来相当复杂。很多人都使用这种风格,但有一种很好的方式:
public String toString() {
return String.format(
"Headphone %s by %s, %s, volume %s",
model,
manufacturer,
pluggedIn ? "plugged in" : "unplugged",
volume);
}这种样式使您很容易看到生成的字符串的一般模式。每个%s都是一个占位符,按照给定的顺序用下面行中的值替换。
操作符用于生成人类可读的文本,而不是非常技术性的true/false。
https://codereview.stackexchange.com/questions/203753
复制相似问题