[英]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.