我正在努力在java中构建一个赌场游戏套件(我110%肯定有更好,更简单的语言,但我现在正在学习java,我想用java编写代码实践。) 我的问题是我无法弄清楚如何构建我的代码。我习惯使用goto语句(我开始学习小基础编码)。例如:
import java.util.*;
public class CasinoGames
{
public static void main(String[] args)
{
Scanner keys = new Scanner(System.in);
sopln("Hello, and welcome to Casino Games!");
sopln("Would you like to login, register, or play as a guest?");
char token = keys.nextLine().toLowerCase().charAt(0);
randomlabelhere:
if (token == "l")
User.login();
else if (token == "r")
User.register();
else if (token == "g")
User.guestLogin();
else
sopln("Invalid Choice, please try again!");
goto somerandomlabel
我知道这不会编译,所以请不要提及。我知道我可以使用do-while循环,但如果我想要选择执行goto,我还有哪些替代方案?
答案 0 :(得分:7)
for-loop
while-loop
do-while-loop
goto
(恕我直言)此外,token == "l"
不是String
比较在Java中的工作方式,您希望更像"l".equals(token)
此外,token
是char
的类型,因此它应该更像token == '1'
,但您可以使用String
并使用{{1} },但您需要测试token.trim().startsWith("1")
结果
答案 1 :(得分:2)
Java与goto
最接近的是break
和continue
的标签。 Goto已经considered harmful的时间比Java更长,因此Java没有goto实现(和 goto
是reserved word所以你不能添加一个)。最后,由于token
是char
,您应该与char
文字进行比较,例如
while(true) {
if (token == 'l')
User.login();
else if (token == 'r')
User.register();
else if (token == 'g')
User.guestLogin();
else {
sopln("Invalid Choice, please try again!");
continue;
}
break;
}
答案 2 :(得分:2)
如果你愿意,你可以采取goto
下的所有内容,并使其成为自己的方法。假设您想要goto startInteraction
,那么您可以这样做:
void startInteraction(){
//everything below your "randomlabelhere:" would go in this method
}
然后在您想要触发时调用startInteraction()
。
不同之处在于,goto
不会返回到调用它的位置,而此方法会。如果您在调用return;
后面的行中使用startInteraction()
,则可以模拟该功能,以便代码不会继续执行方法调用。
答案 3 :(得分:1)
这是你可以做到的一种方式:
import java.util.*;
public class CasinoGames
{
public static void main(String[] args)
{
Scanner keys = new Scanner(System.in);
sopln("Hello, and welcome to Casino Games!");
sopln("Would you like to login, register, or play as a guest?");
while (true) {
char token = keys.nextLine().toLowerCase().charAt(0);
if (token == 'l') {
User.login();
break;
}
else if (token == 'r') {
User.register();
break;
}
else if (token == 'g') {
User.guestLogin();
break;
}
else {
sopln("Invalid Choice, please try again!");
}
}
}
}
答案 4 :(得分:0)
import java.util.Scanner;
public class Casino {
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in)) {
sopln("Hello, and welcome to Casino Games!");
sopln("Would you like to login, register, or play as a guest?");
while (true) {
char token = input.next().toLowerCase().charAt(0);
if (token == 'l') {
User.login();
break;
} else if (token == 'r') {
User.register();
break;
} else if (token == 'g') {
User.guestLogin();
break;
} else {
sopln("Invalid Choice, please try again!");
}
}
}
}
public static void sopln(String str) {
System.out.println(str);
}
private static class User {
static void login() {}
static void register() {}
static void guestLogin() {}
}
}
Scanner在Java 7+中实现AutoCloseable,因此我使用try-with-resources功能对其进行了管理。
注意:应向用户显示菜单,以便他们知道l,r和g代表什么。我知道这似乎很明显,但你会感到惊讶:-P
我还会为退出程序添加某种逃逸案例。
我正在考虑上一次使用goto语句,并且唯一想到的是MIPS程序集跳转操作。