質問: true; break; } } if(judge) System.out.println("YES"); else System.out.println("NO"); } } } catch(IOException e) { System.out.println("IOException" + e); System.exit(1); } } } ```
回答: このコードでは目標数値が0である場合に、それに対応する集合要素の読み込みを行わず、 "Yes"を出力して次のテストケースを読み込むループに入ります。 この結果、その次の行の「集合の要素数」、さらに次の行の「集合の要素」を、 それぞれ次のループで「目標数値」、「集合の要素数」として読み込むことになります。 集合の要素としてスペース区切りとしている文字を要素数として変換しようとするため、 例外が発生してしまいます。 ``` // 例として出ている入力において、最後のテストケースのあとにまだ続きがあったとしたら 0 //これがtargetに変換され、if(target==0)の判定でtrueになり、"Yes"を出力して次のループに移行 2 //次のループでこれがtargetに変換される 0ではないのでelseブロックへ 13 567 //集合の要素数numとしてこの文字列を変換しようとするが、変換できず例外発生 ``` なので、目標数値が0でも、対応する要素数や集合の要素を全部ちゃんと読み込むようにする必要があります。