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

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

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

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

Q&A

解決済

1回答

783閲覧

多重のfor ループ JAVA

Malson

総合スコア10

Java

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

0グッド

1クリップ

投稿2020/08/31 15:04

前提・実現したいこと

paizaラーニングでJAVAの問題を解いていますが、以下の問題において、作成したコードが正当とはみなされません。
この問題集は回答がなく、また対応した質問フォーマットも存在しておりません。
考え方や何か見落としている点などご教示いただければと考えています。

該当URLはhttps://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_for_step4?language_uid=java

m 個の文字 c_1, ..., c_m と、 n 個の文字列 S_1, ..., S_n が与えられます。各 c_i (1 ≤ i ≤ m) について、各 S_j (1 ≤ j ≤ n) に c_i が出現するかをそれぞれ調べ、出現する場合は "YES" を、そうでない場合には "NO" を、そのつど出力してください。

入力される値のフォーマット

m c_1 c_2 ... c_m n S_1 S_2 ... S_n

作成したコード

java

1import java.util.*; 2public class Main { 3 public static void main(String[] args) { 4 Scanner sc = new Scanner(System.in); 5 6 // m個の文字を格納する配列c_mを作成 7 int m = sc.nextInt(); 8 String[] c_m = new String[m]; 9 for (int i=0; i<m; i++) { 10 String c = sc.next(); 11 c_m[i] = c; 12 } 13 14 int n = sc.nextInt(); 15 String str1; 16 String str2; 17 18     // n個の文字列に対して、c_mから順番に取り出した要素が含まれているか順番に確認する 19 for (int i=0; i<n; i++) { 20 str1 = sc.next(); 21 for (int j=0; j<c_m.length; j++) { 22 str2 = c_m[j]; 23 if (str1.contains(str2)) { 24 System.out.println("YES"); 25 } else { 26 System.out.println("NO"); 27 } 28 } 29 } 30 } 31} 32

試したこと

この問題で答え合わせを実行するとステップ3(50の文字と50の文字列をテスト)で不正解となります。
テストのインプットデータをダウンロードすることはできるのですが、どこでエラーになっているのかは表示されないため、
どこに問題があるのか緒が掴めないでいます。

他に以下のようなコードも書いてみましたが、実行結果は同じでした。

if(str1.indexOf(str2) != -1){ ~~~~~~~~~~~~~~~~ }

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

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

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

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

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

javahack

2020/08/31 19:08

提示された先はログインが必要なようです。 paizaは問題を公開したり、他の場所で質問するのを禁止しているページがあると聞きますが、大丈夫でしょうか? 公開禁止の場合は速やかにteratail運営に削除依頼を出してください。
dodox86

2020/08/31 23:22

>@javahackさん、および質問者さん この提示の問題については、以下の記載があります。 https://paiza.jp/works/mondai > このコーナー内の問題については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。 > 授業や研修にもご利用いただけますので、ぜひ教材などにもお使いください。 「ユーザー同士」の部分が「解答を教え合ったり」の部分にのみかかっているのか、paizaユーザーを超えてコードを公開するのは自由なのかどうも微妙ですね。 paizaラーニングのFAQを見ると、以下の記載があります。 https://paizasupport.zendesk.com/hc/ja/articles/360035435872-paiza%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%A7%E5%AD%A6%E3%82%93%E3%81%A0%E5%86%85%E5%AE%B9%E3%82%92%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AA%E3%81%A9%E3%81%A7%E5%85%AC%E9%96%8B%E3%81%97%E3%81%9F%E3%81%84 > paizaラーニングで学んだ内容をブログなどで公開したい (現時点から10か月前に掲載の内容) > 学習のモチベーション向上にも繋がると思いますので、ぜひ公開ください。 ただし、以下の点についてご注意ください。 > > ご自身で作成されたコードは公開していただいてかまいません。ただし、演習課題の模範解答の内容をそのままコピーして公開するのはお控えください。 > 動画の説明やセリフなどのコンテンツにつきましては、部分的に引用していただいてかまいません。ですが、コンテンツ全体をコピーするようなご利用はお控えください。 paizaスキルチェックであれば論外ですが、paizaラーニングに関しては上記を読む限り、大丈夫な気はします。(良識での判断もありそうなので、私から断言は避けておきます)
Malson

2020/09/01 01:09

javahack様、dodox86様、 ご指摘並びに、ご教示ありがとうございます。 ご指摘の点考えが浅く、事前に質問内容に記載をしておくべきでした。 次回、同じような質問をすることがあれば、留意して質問する所存です。
guest

回答1

0

ベストアンサー

問題文は、「各 c_i (1 ≤ i ≤ m) について、各 S_j (1 ≤ j ≤ n) に c_i が出現するかをそれぞれ調べ」ということなので、c_iについてのループの内側でS_jのループを回すことになります。
今のあなたのコードは、S_jについてのループの内側でc_iのループを回しています。
問題文に書かれているテストケースでは、どちらのループの回し方でもたまたま同じ出力が出ているだけです。(これは少しテストケースが意地悪ですね)

'YES','NO'の出力判定は正しいので、ループの回し方を変えてみてください。

投稿2020/08/31 15:51

編集2020/08/31 15:54
Lorse

総合スコア80

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

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

Malson

2020/09/01 01:04 編集

ありがとうございます。 理解しました。 コードに見落としがあるのではなく、問題内容の読解というか、国語力の問題だったのですね。 YESーNOの出力順に問題があって一致しないということから、ループの順序を変えるという発想をするべきだったのだと思います。 見にくい仕様書もきちんと読みなさいという訓練だと思って教訓にしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問