这是一个有效的案例,使用' goto'在爪哇

时间:2015-11-07 15:40:53

标签: java goto

我非常清楚'转到'在结构化编程的大多数专业追随者的词典中是一个肮脏的词。所以我会问以下如何使用' 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) }

人们对此有何看法?

3 个答案:

答案 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语句。