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;
}
# 1 楼答案
另一个想法是使用enum而不是switch case,这提供了更大的灵活性;可重用性
# 2 楼答案
根据你在评论中添加的内容,你的切换声明(尽管不完整)不应该像其他海报所假设的那样成为问题的原因
您可能对
switch
案例的完整性有问题,但这不应阻止切换按预期工作你是说你调试了这个,并且
i
有""
的值,我无法理解,除非你在作用域中没有返回值安东尼斯·拉兹(Antonis Radz)给出的答案是,如果有必要,我会如何编写这个开关
如果您编写Convert函数以这样返回,那么就不需要额外的
i
变量,我们不知道您在哪里声明了这个变量如果你调试这行代码(就像你说的那样)
switch(value)
您告诉我们value
=="Left"
那么开关在运行时收到了正确的值现在你的“Case”被执行了(当你在
case "Left"
中设置一个断点时)。因此,到目前为止,开关仍然在执行它的功能那么我假设您在以下行中添加了另一个断点:
看看发生了什么
第一个断点将在赋值
i=
中命中。。。所以变量i
,我假设它在作用域的某个地方被声明为String i
(至少),要么为null,要么包含一个旧值。这无关紧要,因为在i
被分配字符串"4"
的值之后,将到达下一个断点(在break
行中)。因此,如果你在i
中添加一块手表,并在那里检查它,它的值必须是“4”然后返回这个
i
,所以它仍然应该是“4”如果你做了所有这些,你就能更清楚地知道变量没有被分配到哪里
# 3 楼答案
应该是这样的
# 4 楼答案
使用
return "4";
在开关盒中不打印任何内容,因此开关不能返回任何内容。如果要在开关盒输出中打印,请使用打印方法或在任何编程语言中返回# 5 楼答案
像这样做
根据您的要求将i声明为String或int。方法是一样的。如果要将i赋值为int,请不要忘记删除引号