Java 如何返回与枚举值等效的字符串
我试图在我的程序中实现这个枚举,以便它返回与枚举值等效的字符串。例如,如果dept的值=3,那么它将返回打印的书籍和电子书 这就是我到目前为止所做的,它似乎不起作用,因为当我转到我的ProgramTester类并尝试添加一个新的OrderItem时,当我为构造函数的部门部分输入一个0-5之间的整数时,它表示构造函数是未定义的 有人知道我做错了什么吗 枚举Java 如何返回与枚举值等效的字符串,java,arrays,enums,constructor,return,Java,Arrays,Enums,Constructor,Return,我试图在我的程序中实现这个枚举,以便它返回与枚举值等效的字符串。例如,如果dept的值=3,那么它将返回打印的书籍和电子书 这就是我到目前为止所做的,它似乎不起作用,因为当我转到我的ProgramTester类并尝试添加一个新的OrderItem时,当我为构造函数的部门部分输入一个0-5之间的整数时,它表示构造函数是未定义的 有人知道我做错了什么吗 枚举 public enum Department { ELECTRICAL(0), PHOTOGRAPHIC(1), COMPUTING(2),
public enum Department {
ELECTRICAL(0), PHOTOGRAPHIC(1), COMPUTING(2), BOOKS(3), MUSIC(4), FASHION(5);
private int dNum;
private static String dept[] = { "Electrical & Electronics", "Cameras & Photography", "Laptops, Desktops & Consoles",
"Printed Books & eBooks", "MP3 & CD Music", "Fashion & Accessories" };
private Department(int num) {
dNum = num;
}
public String toString() {
return dept[dNum];
}
}
public class OrderItem {
private int itemCode;
private String itemName;
private String itemSupplier;
private double itemCost;
private Department dept;
private static int nextCode = 1;
public OrderItem(String itemName, String itemSupplier, double itemCost, Department dept) {
setItemName(itemName);
setItemSupplier(itemSupplier);
setItemCost(itemCost);
setDepartment(dept);
}
public void setItemName(String itemName) {
if (itemName != null) {
this.itemName = itemName;
} else {
if (this.itemName == null)
// a default value
this.itemName = "Unknown";
}
}
public void setItemSupplier(String itemSupplier) {
if (itemSupplier != null) {
this.itemSupplier = itemSupplier;
} else {
if (this.itemSupplier == null)
// a default value
this.itemSupplier = "Unknown";
}
}
public void setItemCost(double itemCost) {
this.itemCost = itemCost;
}
public void setDepartment(Department dept) {
this.dept = dept;
}
public void setDepartment(int dept) {
if (dept == 0)
setDepartment(Department.ELECTRICAL);
else if (dept == 1)
setDepartment(Department.PHOTOGRAPHIC);
else if (dept == 2)
setDepartment(Department.COMPUTING);
else if (dept == 3)
setDepartment(Department.BOOKS);
else if (dept == 4)
setDepartment(Department.MUSIC);
else if (dept == 5)
setDepartment(Department.FASHION);
}
public String getItemName() {
return this.itemName;
}
public String getItemSupplier() {
return this.itemSupplier;
}
public double getItemCost() {
return this.itemCost;
}
public String getDepartment() {
return dept.toString();
}
public int useNextCode() {
itemCode = nextCode;
nextCode++;
return itemCode;
}
public String getDetails() {
String result = "Item name: " + getItemName() + "\n Supplier: " + getItemSupplier() + "\n Department: "
+ getDepartment() + "\n Cost: " + getItemCost();
return result;
}
public String toString() {
System.out.println("Item Code: " + useNextCode());
return getDetails();
}
}
节目
public enum Department {
ELECTRICAL(0), PHOTOGRAPHIC(1), COMPUTING(2), BOOKS(3), MUSIC(4), FASHION(5);
private int dNum;
private static String dept[] = { "Electrical & Electronics", "Cameras & Photography", "Laptops, Desktops & Consoles",
"Printed Books & eBooks", "MP3 & CD Music", "Fashion & Accessories" };
private Department(int num) {
dNum = num;
}
public String toString() {
return dept[dNum];
}
}
public class OrderItem {
private int itemCode;
private String itemName;
private String itemSupplier;
private double itemCost;
private Department dept;
private static int nextCode = 1;
public OrderItem(String itemName, String itemSupplier, double itemCost, Department dept) {
setItemName(itemName);
setItemSupplier(itemSupplier);
setItemCost(itemCost);
setDepartment(dept);
}
public void setItemName(String itemName) {
if (itemName != null) {
this.itemName = itemName;
} else {
if (this.itemName == null)
// a default value
this.itemName = "Unknown";
}
}
public void setItemSupplier(String itemSupplier) {
if (itemSupplier != null) {
this.itemSupplier = itemSupplier;
} else {
if (this.itemSupplier == null)
// a default value
this.itemSupplier = "Unknown";
}
}
public void setItemCost(double itemCost) {
this.itemCost = itemCost;
}
public void setDepartment(Department dept) {
this.dept = dept;
}
public void setDepartment(int dept) {
if (dept == 0)
setDepartment(Department.ELECTRICAL);
else if (dept == 1)
setDepartment(Department.PHOTOGRAPHIC);
else if (dept == 2)
setDepartment(Department.COMPUTING);
else if (dept == 3)
setDepartment(Department.BOOKS);
else if (dept == 4)
setDepartment(Department.MUSIC);
else if (dept == 5)
setDepartment(Department.FASHION);
}
public String getItemName() {
return this.itemName;
}
public String getItemSupplier() {
return this.itemSupplier;
}
public double getItemCost() {
return this.itemCost;
}
public String getDepartment() {
return dept.toString();
}
public int useNextCode() {
itemCode = nextCode;
nextCode++;
return itemCode;
}
public String getDetails() {
String result = "Item name: " + getItemName() + "\n Supplier: " + getItemSupplier() + "\n Department: "
+ getDepartment() + "\n Cost: " + getItemCost();
return result;
}
public String toString() {
System.out.println("Item Code: " + useNextCode());
return getDetails();
}
}
无法在OrderItem构造函数中传递整数(0-5)。相反,您需要传递所需的枚举。这应该行得通
OrderItem oi = new OrderItem("PenDrive","HP",300.0, Department.ELECTRICAL);
由于标题问题是如何返回
enum
的字符串值,答案可能是重构enum
以具有description
字段,而不是字符串的内部静态数组,并添加一种方法,以按顺序值检索部门
:
公共枚举部门{
电气(“电气与电子”),
摄影(“照相机和摄影”),
计算机(“笔记本电脑、台式机和控制台”),
书籍(“印刷书籍和电子书”),
音乐(“MP3和CD音乐”),
时尚(“时尚与配饰”);
私有字符串描述;
私人部门(字符串描述){
this.description=描述;
}
公共字符串toString(){
返回此.description;
}
公共静态部门拜纳姆(国际顺序){
if(序数FASHION.ordinal()){
返回null;//或抛出IllegalArgumentException
}
返回部门。值()[序号];
}
}
然后方法OrderItem::setDepartment(int dept)
可以这样更改(而不是多个if
语句):
公共部门(内部部门){
可选。不可用(部门。拜纳姆(部门))
.ifPresent(OrderItem::setDepartment);
}
您应该将这些值链接到枚举本身,而不是链接到您想发布一个简洁说明问题的其他arrayPerhaps。