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

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

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

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

2回答

1318閲覧

java リスト比較各インデックス番号に対して行う場合

stzyang

総合スコア6

Java

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2020/09/09 14:23

編集2020/09/09 15:27

空文字が入力されるまで、入力された文字を入力してリストnameに格納し、新しく入力を受け付けて空文字が入力されるまでに入力された文字を新たなリストsearchに登録します。
その後nameに登録された各要素に真偽値を返し下記のような表示が出るようプログラムを作っています

name[0] は true
name[1] は false
name[2] は false


java

1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.Scanner; 4public class main { 5 public static void main (String[]args) { 6 //1 7 //比較するための配列を二つ用意 8 ArrayList<String> name = new ArrayList<String>(); 9 ArrayList<String> search = new ArrayList<String>(); 10 11 System.out.println("去年の参加者を入力してください"); 12 13 14 //無限ループで入力を何度も受け付ける 15 for(int i = 1; i < 10;) { 16 17 String text = new Scanner(System.in).nextLine(); 18 19 //もし空文字が入力されたら二つ目の配列に検索する文字を入れる 20 if (text.isEmpty() == true) { 21 System.out.println("今年の参加者を入力してください"); 22 23 //検索する文字も何度も受け付ける 24 for (int j = 0; j < 10;) { 25 String type = new Scanner(System.in).nextLine(); 26 27 //空文字入力時比較を開始 28 if (type.isEmpty() == true) { 29 30 for (int n = 0; n <= 10;) { 31 32 //name[0]から最後の番号までtypeと一致するものがあるか比較し表示 33 34 35 } 36 37 } else { 38 search.add(type); 39 } 40 41 } 42 43 } else { 44 name.add(text); 45 } 46 } 47 } 48 49 50} 51

//name[0]から最後の番号までtypeと一致するものがあるか比較し表示
の部分を真偽値を返すcontaionsやequalsメソッドで試したのですが、各インデックス番号の要素に対して働く真偽値を見つけることができませんでした
要素を表示しつつ、その要素がtrueかfalseを同時に出力する場合どうすればいいでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

Java

1import java.util.List; 2import java.util.ArrayList; 3import java.util.Scanner; 4 5public class main { 6 public static void main (String[]args) { 7 List<String> name = new ArrayList<>(); 8 List<String> search = new ArrayList<>(); 9 Scanner sc = new Scanner(System.in); 10 11 System.out.println("去年の参加者を入力してください"); 12 for (;;) { 13 String text = sc.nextLine(); 14 if (text.isEmpty()) break; 15 name.add(text); 16 } 17 System.out.println("今年の参加者を入力してください"); 18 for (;;) { 19 String type = sc.nextLine(); 20 if (type.isEmpty()) break; 21 search.add(type); 22 } 23 for (int i = 0; i < name.size(); i++) 24 System.out.println("name[" + i + "] は " 25 + (search.indexOf(name.get(i)) >= 0)); 26 } 27}

追記
タイトルに「各インデックス番号」とあって、それに引きずられて indexOf を使ってしまいましたが、
swordone さんのご指摘通り、contains の方がおすすめです。
でも indexOf を使ったおかげで比較演算子が true/false を返すことが分かって良かったですね。

for 文には次のような使い方もあります。

Java

1 int i = 0; 2 for (String s : name) 3 System.out.println("name[" + i++ + "] は " + search.contains(s));

投稿2020/09/09 15:40

編集2020/09/09 23:56
kazuma-s

総合スコア8224

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

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

swordone

2020/09/09 17:10

search.indexOf(name.get(i)) >= 0 は search.contains(name.get(i)) のほうが見通しがよくなりそうです。
stzyang

2020/09/09 21:40 編集

返信遅くなり申し訳ありません for ループの無限ループ時は(;;)でも大丈夫なこと恥ずかしながら初めて知りました 今後活用させていただきます containsで試した際初めにcount変数を用意してループのたびにプラスさせて for (int = i; i < count; i ++){ System.out.println("name") if (name.size() == i){ break; } } でどうにかしようと格闘してgetメソッドの存在を忘れていました なるほどそもそも配列でいうlength扱いで要素数返すからループ処理時はこちらのほうがはるかに簡単ですね。 改めてご指摘及びコードの改善案をありがとうございます!!! 重ね重ねの質問になるのですが、indexOfはインデックス番号を返すと記事で見たのですが<=などの比較演算子を使った場合は真偽を返すと捉えてよろしいのでしょうか?
stzyang

2020/09/10 00:08

詳しい記事までありがとうございます!! 拡張for文の扱いにまだ慣れておらずあまり使ってませんでしたがシンプルで見やすいので、ならして積極的に使っていけるように頑張ります! 本当にありがとうございます
guest

0

java

1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.Scanner; 4public class main { 5 public static void main (String[]args) { 6 ArrayList<String> name = new ArrayList<String>(); 7 ArrayList<String> seach = new ArrayList<String>(); 8 9 System.out.println("去年の参加者を入力してください"); 10 11 for(int i = 1; i < 10;) { 12 String text = new Scanner(System.in).nextLine(); 13 14 if (text.isEmpty() == true) { 15 System.out.println("今年の参加者を入力してください"); 16 17 for (int j = 0; j < 10;) { 18 String type = new Scanner(System.in).nextLine(); 19 20 if (type.isEmpty() == true) { 21 for (int n = 0; n <= 10;) { 22 // 追記 23 System.out.println("name[" + n + "] は " + String.valueOf(name[n] == search[j - 1])); 24 25 } 26 27 } else { 28 seach.add(type); 29 } 30 31 } 32 33 } else { 34 name.add(text); 35 } 36 } 37 } 38}

投稿2020/09/09 14:42

unhappychoice

総合スコア1531

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

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

stzyang

2020/09/09 21:13

回答後に修正して申し訳ありません 配列ではなくリストに真偽値を返す処理でした 今後配列を使う際は参考にさせていただきます!! 回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問