有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java My switch语句没有返回任何内容?

我从警报对话框中选择了一个“左”,并将其放入convertStatusToCode函数后,应该重新运行“4”,但它不是吗

final String[] status = {"Left"};

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("Pick a Status");
builder.setItems(status, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        BookingStatus = convertStatusToCode(status[which]);

这是我的convertStatusToCode函数,但它没有重新运行应该返回的“4”


private String convertStatusToCode(String status) {

    switch (status) {
        case "Processing":
            i = "0";
            break;
        case "Room is Allotted":
            i = "1";
            break;
        case "Sorry All Rooms Are Full":
            i = "2";
            break;
        case "Living":
            i = "3";
            break;
        case "Left":
            i = "4";
            break;
    }
    return i;
}


共 (5) 个答案

  1. # 1 楼答案

    另一个想法是使用enum而不是switch case,这提供了更大的灵活性;可重用性

    public enum BookingStatus
    {
    
        PROCESSING("Processing", 1),
        ALLOTED_ROOM("Room is Allotted", 2),
        ALL_FULL("Sorry All Rooms Are Full", 3),
        LIVING("Living", 4),
        LEFT("LEFT", 5);
    
        private String status;
        private int code;
    
        BookingStatus(String status, int code)
        {
            this.status = status;
            this.code = code;
        }
    
        public static BookingStatus getCodeFromStatus(String status)
        {
            for (BookingStatus e : values()) {
                if (e.status.equals(status)) {
                    return e;
                }
            }
            return null;
        }
    
        public static void main(String args[]) {
            System.out.printf("Code for this status is %s", BookingStatus.getCodeFromStatus("Sorry All Rooms Are Full").code);
        }
    
    }
    
  2. # 2 楼答案

    根据你在评论中添加的内容,你的切换声明(尽管不完整)不应该像其他海报所假设的那样成为问题的原因

    您可能对switch案例的完整性有问题,但这不应阻止切换按预期工作

    你是说你调试了这个,并且i""的值,我无法理解,除非你在作用域中没有返回值

    安东尼斯·拉兹(Antonis Radz)给出的答案是,如果有必要,我会如何编写这个开关

    如果您编写Convert函数以这样返回,那么就不需要额外的i变量,我们不知道您在哪里声明了这个变量

    如果你调试这行代码(就像你说的那样)

    switch(value)您告诉我们value=="Left"那么开关在运行时收到了正确的值

    现在你的“Case”被执行了(当你在case "Left"中设置一个断点时)。因此,到目前为止,开关仍然在执行它的功能

    那么我假设您在以下行中添加了另一个断点:

                i = "4";
                break;
    

    看看发生了什么

    第一个断点将在赋值i=中命中。。。所以变量i,我假设它在作用域的某个地方被声明为String i(至少),要么为null,要么包含一个旧值。这无关紧要,因为在i被分配字符串"4"的值之后,将到达下一个断点(在break行中)。因此,如果你在i中添加一块手表,并在那里检查它,它的值必须是“4”

    然后返回这个i,所以它仍然应该是“4”

    如果你做了所有这些,你就能更清楚地知道变量没有被分配到哪里

  3. # 3 楼答案

    应该是这样的

      String getStatusCode(String status) {
            switch (status) {
                case "Processing":
                    return "0";
                case "Room is Allotted":
                    return "1";
                case "Sorry All Rooms Are Full":
                    return "2";
                case "Living":
                    return "3";
                case "Left":
                    return "4";
                default:
                    return "default_value";
            }
        }
    
  4. # 4 楼答案

    switch (status) {
            case "Processing":
                i = "0";
                break;
            case "Room is Allotted":
                i = "1";
                break;
            case "Sorry All Rooms Are Full":
                i = "2";
                break;
            case "Living":
                i = "3";
                break;
            case "Left":
                i = "4";
              // return "4";
                break;
        }
        return i;
    }
    

    使用return "4";在开关盒中不打印任何内容,因此开关不能返回任何内容。如果要在开关盒输出中打印,请使用打印方法或在任何编程语言中返回

  5. # 5 楼答案

    像这样做

        public String getstatuscode(String status){
            String i="";
            switch (status) {
                case "Processing":
                    i = "0";
                    break;
                case "Room is Allotted":
                    i = "1";
                    break;
                case "Sorry All Rooms Are Full":
                    i = "2";
                    break;
                case "Living":
                    i = "3";
                    break;
                case "Left":
                    i = "4";
                    break;
                default:
                    i = "-1";
    
            }
            return i;
        }
    

    根据您的要求将i声明为String或int。方法是一样的。如果要将i赋值为int,请不要忘记删除引号