質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

6回答

44165閲覧

例外が発生した後もメソッドの処理を継続する方法

moomin_y

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

1グッド

2クリップ

投稿2018/10/17 02:41

例外が発生した後もメソッドの処理を継続させる方法が分かりません。
実現したい内容としては
8件目の処理で例外が発生しても、9件目の処理を続行させ
8件目の処理内容を「8件目エラー」とすることです。

Java

1public class sample { 2 3 public static void main(String[] args) { 4 5 test(); 6 } 7 8 public static void test() { 9 int i = 1; 10 try{ 11 for(i = 1; i < 10; i ++) { 12 if(i == 8) { 13 throw new Exception(); 14 } 15 else{ 16 System.out.println(i + "件目正常"); 17 } 18 } 19 } 20 catch(Exception e) { 21 System.out.println(i + "件目エラー"); 22 } 23 } 24}

期待している結果は
1件目正常
2件目正常
...
8件目エラー
9件目正常

ですが
このコードだと
「8件目エラー」で終わってしまいます。

welfare_pg👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

ベストアンサー

for文の外にtry-catchがあるので、例外が発生した場合は
for文の外のcatchに飛ぶようになっています。

ループを継続させたいならループの中に入れておけば良いでしょう。

投稿2018/10/17 02:46

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1package teratail; 2 3public class sample_x { 4 public static void main(String[] args) { 5 test(); 6 } 7 8 public static void task(int idx) throws Exception { 9 if (idx == 8) { 10 throw new Exception(); 11 } 12 } 13 14 public static void test() { 15 for (int i = 1; i < 10; i++) { 16 try { 17 task(i); 18 System.out.println(i + "件目正常"); 19 } catch (Exception e) { 20 System.out.println(i + "件目エラー"); 21 } 22 } 23 } 24}

実行例
イメージ説明

投稿2018/10/17 12:36

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どうしても例外でやりたければ、forループの中でtryすれば良い。
でもそもそも例外を使う処理ではない。

投稿2018/10/17 02:49

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例外をキャッチしたときにループを抜けてるからです。

Java

1for(i = 1; i < 10; i ++) { 2 try { 3 if(i == 8) { 4 throw new Exception(); 5 } 6 else{ 7 System.out.println(i + "件目正常"); 8 } 9 } 10 catch(Exception e) { 11 System.out.println(i + "件目エラー"); 12 } 13}

投稿2018/10/17 02:47

LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

って、try-catch をforループの中に納めればOK

投稿2018/10/17 02:44

編集2018/10/17 02:47
y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

前提条件が不明なので何とも言えないところではありますが、test()の中でループさせなくてもよいのであれば、main()の中でループを掛けてしまうのはどうでしょうか。

java

1public class sample { 2 3 public static void main(String[] args) { 4 int i = 1; 5 for(i = 1; i < 10; i ++) { 6 test(i); 7 } 8 } 9 10 public static void test(int cnt) { 11 try{ 12 if(cnt == 8) { 13 throw new Exception(); 14 } 15 System.out.println(cnt + "件目正常"); 16 } 17 catch(Exception e) { 18 System.out.println(cnt + "件目エラー"); 19 } 20 } 21}

投稿2018/10/17 02:54

mikan_s4n

総合スコア377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問