是否可以在不终止程序的情况下退出主方法?
我知道return语句并尝试过。 System.exit(0)也是这样。但在这里使用它会终止程序。有什么办法可以使用,以便如果用户键入除1-7以外的其他输入,程序不会终止,这样我就不必重新编译和重新运行该程序?或者在Java中不可能?是否可以在不终止程序的情况下退出主方法?
import java.util.Scanner;
public class NewShoppingCart{
public static void main(String args[]) {
boolean flag = true;
long code;
String choice;
NewShop aShop = new NewShop();
Scanner sc = new Scanner(System.in);
Integer parse = 0;
System.out.println("-----ITEM------");
do {
System.out.println("1. Display all items");
System.out.println("2. Search items");
System.out.println("3. Add items to list");
System.out.println("4. Add items to cart");
System.out.println("5. Display cart");
System.out.println("6. Issue item");
System.out.println("7. Exit");
System.out.println("Choice:");
choice = sc.nextLine();
try{
parse = Integer.parseInt(choice);
}
catch(Exception e){
System.out.println("Please enter a valid integer");
return;
}
if (parse >=1 && parse <= 7)
{
switch (parse) {
case 1:
aShop.display();
break;
case 2:
aShop.searchItem();
break;
case 3:
aShop.addItem();
break;
case 4:
aShop.addItemtoCart();
break;
case 5:
aShop.displayCart();
break;
case 6:
aShop.issueItem();
break;
case 7:
System.out.println("Thank you!\n");
flag = false;
break;
default :
System.out.println("Please enter choice relevant to context");
}
}
else return;
}
while (flag != false);
sc.close();
}
}
只有一个线程,您永远无法走出main
。这可能是一个XY问题。你真正想要的是回到循环的开始,如果用户输入无效的东西。
continue
关键字将停止执行封闭循环的当前迭代并立即开始新的迭代。这是你应该用来代替return
的地方。
try{
parse = Integer.parseInt(choice);
}
catch(Exception e){
System.out.println("Please enter a valid integer");
return; // <--- change this to "continue;"
}
而且,这样的:
if (parse >=1 && parse <= 7)
{
switch (parse) {
case 1:
aShop.display();
break;
case 2:
aShop.searchItem();
break;
case 3:
aShop.addItem();
break;
case 4:
aShop.addItemtoCart();
break;
case 5:
aShop.displayCart();
break;
case 6:
aShop.issueItem();
break;
case 7:
System.out.println("Thank you!\n");
flag = false;
break;
default :
System.out.println("Please enter choice relevant to context");
}
}
else return;
真的应该是:
if (parse >=1 && parse <= 7)
{
switch (parse) {
case 1:
aShop.display();
break;
case 2:
aShop.searchItem();
break;
case 3:
aShop.addItem();
break;
case 4:
aShop.addItemtoCart();
break;
case 5:
aShop.displayCart();
break;
case 6:
aShop.issueItem();
break;
case 7:
System.out.println("Thank you!\n");
flag = false;
break;
}
}
else {
System.out.println("Please enter choice relevant to context");
continue;
}
“请输入相关上下文选择” 的消息应该真正在else语句打印。因为在你的if中,你已经检查parse
是否在1和7之间,所以在交换机中,parse
不能是其他任何东西,所以default
分支永远不会到达。打印完消息后,您需要continue;
才能返回到循环的开始位置。
默认值: System.out.println(“\ n”); } } else System.out.println(“请输入1到7之间的选项”); 继续; }我认为这样做。因为为了“良好实践”,我被建议使用默认情况。 –
您可以删除默认情况,因为在这种情况下,它将永远不会到达。 if语句已经检查1-7之外的值。 @SHACHINDRATRIPATHI其他时候有一个默认情况是更好的,因为它更容易知道是否某些东西不符合您指定的所有情况。这可以帮助调试。 – Sweeper
@SHACHINDRATRIPATHI如果您认为我的答案回答了您的问题,请考虑点击勾号接受它! – Sweeper
更改此
catch(Exception e){
System.out.println("Please enter a valid integer");
return;
}
到
catch(Exception e){
System.out.println("Please enter a valid integer");
continue;
}
也在你else块有continue
代替return
。
您可能想要解释这有何帮助(我同意它) –
nop,这是应用程序的主要入口...一旦你返回该方法,该应用程序就不见了! –
只记录异常不要从那里返回,那么你的while循环将继续并要求再次输入 – Sikorski
当程序终止时,不需要重新编译程序。除非程序自行删除。 – Kayaman