前提
keywordに含まれる文字列があった場合、その文字列を出力
すべて当てはまらなかった場合にnoneを出力したいです。
実現したいこと
このコードだとすべてに当てはまらなかった場合が実現できません。
その前に該当の文字列があっても最後が非該当であれば、noneが出力されてしまいます。
このコードの間違っている部分は、
}else {
if (i == number - 1)
System.out.println("None");
}
の部分だと考えています。
特にi == number - 1の部分は最後のループで非該当の場合にnoneを出力するといった意味ですが
私が実現したいのは
if (strs[i].contains(keyWord)) {
System.out.println(strs[i]);
}
に一度も該当しなかった場合にnoneを出力するです。
発生している問題・エラーメッセージ
該当のソースコード
java
1import java.util.*; 2 3 4public class Main { 5 public static void main(String[] args) { 6 Scanner sc = new Scanner(System.in); 7 int number = sc.nextInt(); 8 sc.nextLine(); 9 String keyWord = sc.nextLine(); 10 String[] strs = new String[number]; 11 for (int i = 0; i < number; i++) { 12 strs[i] = sc.nextLine(); 13 } 14 15 for (int i = 0; i < number; i++){ 16 if (strs[i].contains(keyWord)) { 17 System.out.println(strs[i]); 18 }else { 19 if (i == number - 1) 20 System.out.println("None"); 21 } 22 } 23 24 25 } 26}
試したこと
補足情報(FW/ツールのバージョンなど)
仕様が不明瞭です。複数のキーワードに該当した場合は、どのように動作する仕様なのか、質問文への追記をお願いします。
https://teratail.com/questions/428at9fbd8bt9q にて、java_benkyoucuさんが、正しいコードを書けなかった原因を、コードを組む際の思考を思い出して、確認することをお勧めします。
それが正しく行えれば、この質問の答えも出ます。
ありがとうございます!
もう一度考えてみます。
>~に一度も該当しなかった場合にnoneを出力する
ご自身がコンピュータだったら、どのように処理するでしょう。
コードのように、1つ々々について「 keyword があるかチェックして有ったら表示、無かったら最後かどうかで "none" を表示」するでしょうか?
恐らくは、1つ々々について「 keyword があるかチェックして有ったら表示」を行った後に、「表示したかどうかで "none" を表示」するでしょう。(仕様のまんまですが。)
つまり、 "none" の表示(と表示するかの判定)はループの外であり、「表示をしたかどうか」を覚えておく(変数が)必要であるということです。
なるほどですね!!!
ありがとうございます!!
こういうのは関数に切り出すのが良いと思います。
回答2件
あなたの回答
tips
プレビュー