2017-09-14 58 views
-1

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

} 
} 
+0

nop,这是应用程序的主要入口...一旦你返回该方法,该应用程序就不见了! –

+0

只记录异常不要从那里返回,那么你的while循环将继续并要求再次输入 – Sikorski

+0

当程序终止时,不需要重新编译程序。除非程序自行删除。 – Kayaman

回答

1

只有一个线程,您永远无法走出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;才能返回到循环的开始位置。

+0

默认值: System.out.println(“\ n”); } } else System.out.println(“请输入1到7之间的选项”); 继续; }我认为这样做。因为为了“良好实践”,我被建议使用默认情况。 –

+0

您可以删除默认情况,因为在这种情况下,它将永远不会到达。 if语句已经检查1-7之外的值。 @SHACHINDRATRIPATHI其他时候有一个默认情况是更好的,因为它更容易知道是否某些东西不符合您指定的所有情况。这可以帮助调试。 – Sweeper

+0

@SHACHINDRATRIPATHI如果您认为我的答案回答了您的问题,请考虑点击勾号接受它! – Sweeper

2

更改此

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

+1

您可能想要解释这有何帮助(我同意它) –

相关问题