我正在线上追求学习Java的练习练习并且难倒!
我的程序的要点是我让用户通过单个字符串的输入选择一个选项,然后程序根据值继续到案例。如果执行默认情况,则表示输入无效,然后我想返回用户输入提示。
我最初的想法是使用'goto',但是根据我的理解,除了我阅读代码之外,我可能被任何人扔石头致死。然后就是Java中不存在goto的事实......所以当谷歌搜索时,我发现了'标记符号'。它看起来就像我需要的那样。但是,我插入标签的位置无法识别,即使它与案例属于同一类。我应该怎么做呢?
String newLine = System.getProperty("line.separator");
restart:
System.out.println("Please select the type of shape you wish to calcuate information for: "
+ newLine + "A: Square" + newLine + "B: Rectangle" + newLine + "C: Circle");
char typeShape = input.next().charAt(0);
String shape = Character.toString(typeShape);
switch (shape.toLowerCase()) {
case "a":
//do something
break;
case "b":
//do something
break;
case "c":
//do something
break;
default:
System.out.println("Invalid selection. Please re-enter shape.");
break restart;
}
答案 0 :(得分:4)
我相信你想要标记一个块。像
这样的东西restart: {
System.out.println("Please select the type of shape you wish to calculate "
+ "information for: " + newLine + "A: Square" + newLine + "B: Rectangle"
+ newLine + "C: Circle");
char typeShape = input.next().charAt(0);
String shape = Character.toString(typeShape);
switch (shape.toLowerCase()) {
case "a":
//do something
break;
case "b":
//do something
break;
case "c":
//do something
break;
default:
System.out.println("Invalid selection. Please re-enter shape.");
break restart;
}
}
答案 1 :(得分:4)
我想一个简单的方法是使用do-while
循环。如果条件不满足(输入/字符无效),继续循环,否则将标志设置为false
并退出。
boolean inputFlag;
do {
System.out.println("Please select the type of shape you wish to calcuate information for: "
+ newLine + "A: Square" + newLine + "B: Rectangle" + newLine + "C: Circle");
char typeShape = input.next().charAt(0);
String shape = Character.toString(typeShape);
switch (shape.toLowerCase()) {
case "a":
inputFlag = false;
//do something
break;
case "b":
inputFlag = false;
//do something
break;
case "c":
inputFlag = false;
//do something
break;
default:
System.out.println("Invalid selection. Please re-enter shape.");
inputFlag = true;
}
} while (inputFlag);
答案 2 :(得分:3)
Java允许您标记循环结构(例如for
,while
),然后跳出其中一个循环到外层。
该语言不允许您标记任意行和"转到"它们。
更新:显然我错了。 Java支持标记任意块(但不支持单个语句)。见https://stackoverflow.com/a/1940322/14731
答案 3 :(得分:2)
由于类似的原因,标记的块被不赞成goto
不赞成:它不是自然流动。
话虽如此,你可能想知道如何管理你想要的行为,这很简单:使用循环
//pseudo-code
while(something) {
repeatCode
}
在你的情况下,你会做类似的事情:
boolean choosing = true;
while(choosing) {
switch(...) {
case "a":
choosing = false;
break;
case "b":
choosing = false;
break;
}
}
您可能会发现这有点冗长。相反,您可以在进入循环后立即选择为false,然后在用户未输入正确名称时将其设置为true。
或者更好的是,使用do-while循环:
boolean choosing = false;
do {
switch(...) {
case "a":
break;
default:
choosing = true;
break;
}
} while(choosing);