簡體   English   中英

我的switch語句沒有返回任何內容?

[英]My switch statement is not returning anything?

我從警告對話框中選擇一個“左”,並將其放入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;
}

它應該看起來像這樣

  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";
        }
    }

根據您在評論中添加的內容,您的Switch語句(盡管不完整)不應該是您的問題的原因,正如其他海報所假設的那樣。

您的switch案例的完整性可能有問題,但這不應該阻止交換機按預期工作。

你說你調試這個並且i""的值,除非你沒有范圍內的返回值,否則我無法理解。

Antonis Radz發布的答案就是如果我不得不寫那個開關的話。

如果你將Convert函數寫成這樣返回,那么你不需要額外的i變量,我們不知道你聲明的位置。

如果你調試這行代碼(就像你說的那樣)

switch(value) ,你告訴我們value == "Left"然后開關在運行時接收到正確的值。

現在你的“案例”被執行(當你設置一個斷點case "Left" 。所以開關再次執行它的功能到目前為止。

然后我假設您在以下行中添加了另一個斷點:

            i = "4";
            break;

看看發生了什么。

第一個斷點將在賦值i= ...中命中,因此我假設的變量i在范圍內被聲明為String i (至少),是null或包含舊值。 無關緊要,因為在i被賦予字符串"4"的值后,將到達下一個斷點(在break行中)。 因此,如果您向i添加一個手表並在那里檢查它,它必須具有值“4”。

然后你回到這個i的話,再次,它應該仍然是“4”。

如果你做了這一切,你就能夠更加接近地分配變量的位置。

這樣做。

    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;
    }

聲明我作為String或int作為您的要求。 方法是相同的。如果要將i指定為int,請不要忘記刪除引號。

另一個想法是使用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);
    }

}
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"; 如果你想在開關盒輸出中打印然后使用print方法或以任何編程語言返回,你不會在開關盒中打印任何東西,所以開關不能返回任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM