我非常清楚'转到'在结构化编程的大多数专业追随者的词典中是一个肮脏的词。所以我会问以下如何使用' goto'可以被替换。
我正在撰写一个桥牌竞标应用。我问用户"谁处理了#34;。如果他这样做,没问题。如果他右边的玩家发出(东),则必须询问用户该玩家的出价。如果玩家对面(合作伙伴),则必须询问用户对方的出价是什么,然后是什么东方。如果用户左侧的玩家发出(West),则必须依次询问用户这三个玩家的出价。
我有一项活动"什么出价"显示一个屏幕并通过" 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) }
人们对此有何看法?
答案 0 :(得分:2)
您所描述的内容本质上是一个带有突破的开关语句:
href="*/b" instead of href="*/a/3/b"
自Java 7以来,Java已经在switch语句中支持了Strings,但我建议不要为此使用字符串,并为经销商定义自己的枚举:在这种情况下,switch(whodealt) {
case WEST:
// startActivityForResult() etc. passing WEST;
// process result
// fall through
case NORTH:
// startActivityForResult() etc. passing NORTH;
// process result
// fall through
case EAST:
// startActivityForResult() etc. passing EAST;
// process result
// fall through
case SOUTH: // (the player dealt themselves)
break;
default:
throw new IllegalArgumentException("Unrecognised Dealer");
}
只有一个有限的值域。可以居住,它比所有字符串的范围小得多。
答案 1 :(得分:0)
Java没有goto语句。 goto是Java中的保留关键字,但语言不使用它。请参阅此问题以获得更完整的答案。
Is there a goto statement in Java?
回答你的问题“这是否是在Java中使用'goto'的有效案例”,答案必须是否定的,因为在Java中是不可能的。
答案 2 :(得分:0)
如果右边的玩家发牌(东),则必须询问用户该>玩家的出价。如果玩家对面(合作伙伴),则必须询问用户>玩家对面的出价是什么,然后是什么东。如果用户左边的玩家>发出(West),则必须要求用户反过来这三个玩家的出价。
对于一系列责任来说似乎是一个很好的情况,特别是如果您想要实现更多逻辑代码。否则我会建议像@amnn那样的switch case语句。