【发布时间】:2015-11-07 15:40:53
【问题描述】:
我非常清楚“goto”在结构化编程的大多数专业追随者的词典中是一个肮脏的词。所以我想问一下如何替换下面对“goto”的使用。
我正在编写一个桥牌竞价应用程序。我问用户“谁处理”。如果他这样做,没有问题。如果右边的玩家发牌(东),则必须询问用户该玩家的出价。如果对方发牌(伙伴),用户必须被问及对方的出价是什么,然后是什么东。如果用户左侧的玩家发牌(West),则必须依次询问用户这三个玩家的出价。
我有一个“出价什么”活动,该活动显示一个屏幕,并根据出价者传递“西方”、“您的合作伙伴”或“东方”。使用 startActivityForResult 调用该活动并返回已进行的出价。现在事情就是这样。我认为这是最有效的方法:
if (whodealt == "West") {continue}
else if (whodealt == "North") {goto northbid;}
else if (whodealt == "East") {goto eastbid;}
westbid:
startActivityForResult() etc. passing "West";
process result (e.g. store bid)
northbid:
startActivityForResult() etc. passing "your partner";
process result (e.g. store bid)
eastbid:
startActivityForResult() etc. passing "East";
process result (e.g. store bid)
显然,我已经简化了所有内容。但是下面的替代非goto结构是不是有点麻烦,比如
if (whodealt == "West") {
startActivityForResult() etc. passing "West";
process result (e.g. store bid)
startActivityForResult() etc. passing "your partner";
process result (e.g. store bid)
startActivityForResult() etc. passing "East";
process result (e.g. store bid) }
else if (whodealt == "North") {
startActivityForResult() etc. passing "your partner";
process result (e.g. store bid)
startActivityForResult() etc. passing "East";
process result (e.g. store bid) }
else if (whodealt == "East") {
startActivityForResult() etc. passing "East";
process result (e.g. store bid) }
人们对此有何看法?
【问题讨论】:
-
首先,Java 中不会将字符串与 == 进行比较。您所做的是参照相等检查。
-
您比较字符串的方式将始终返回 false,因为您将
object与string进行比较。 -
你可以用一个开关做你想做的事。不过,对于 Android/Java 1.6,您必须先将字符串转换为枚举/整数。
-
我认为你们没有抓住重点。
-
你知道你的代码不会编译。 Goto 不是 Java 中的有效语句。