2017-09-14 10 views
-1

私はreturn文について知っており、試してみました。 System.exit(0)も同じです。しかし、ここでそれを使用すると、プログラムが終了します。ユーザーが1-7以外の入力を入力した場合、プログラムが終了せず、プ​​ログラムを再コンパイルして再実行する必要がないように、使用できる方法はありますか?それともJavaではできませんか?プログラムを終了せずにmainメソッドを終了することはできますか?

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から1本のスレッドで決して外に出ることはできません。これはおそらく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ブロックに代わり returncontinue持っています。

+1

これはどのように役立つのか説明したいと思うかもしれません(私は同意します) –

関連する問題