【问题标题】:Is it possible to exit from a main method without terminating the program?是否可以在不终止程序的情况下退出 main 方法?
【发布时间】:2018-02-23 00:07:51
【问题描述】:

我知道 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();

 }
}

【问题讨论】:

  • nop,那是应用程序的主入口......一旦你返回该方法,应用程序就消失了!
  • 只记录异常不要从那里返回然后你的while循环将继续并再次要求输入
  • 程序终止时不需要重新编译。除非程序自行删除。

标签: java return main exit


【解决方案1】:

改变这个

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

【讨论】:

  • 你可能想解释一下这有什么帮助(我同意这样做)
【解决方案2】:

你永远不能只用一个线程离开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 之间,所以在 switch 中,parse 不能是其他任何东西,所以永远不会到达 default 分支。打印消息后,您continue; 以便返回到循环的开头。

【讨论】:

  • 默认:System.out.println("\n"); } } else System.out.println("请输入 1 到 7 之间的选择");继续;我认为这会做。因为有人建议我为了“良好做法”而使用默认情况。
  • 您可以删除默认大小写,因为在这种情况下,它永远不会到达。 if 语句已经检查了 1-7 之外的值。 @SHACHINDRATRIPATHI 其他时候使用默认情况会更好,因为更容易知道某些内容是否与您指定的所有情况都不匹配。这有助于调试。
  • @SHACHINDRATRIPATHI 如果您认为我的回答回答了您的问题,请考虑点击复选标记接受它!
  • 检查完成!谢谢。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2021-04-12
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多