Java 如何返回与枚举值等效的字符串

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),

我试图在我的程序中实现这个枚举,以便它返回与枚举值等效的字符串。例如,如果dept的值=3,那么它将返回打印的书籍和电子书

这就是我到目前为止所做的,它似乎不起作用,因为当我转到我的ProgramTester类并尝试添加一个新的OrderItem时,当我为构造函数的部门部分输入一个0-5之间的整数时,它表示构造函数是未定义的

有人知道我做错了什么吗

枚举

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。