整数の配列に1から12までの全ての整数が入っているかを判定するメッソッドを書きたいのですが、どうしたらいいのかわかりません。
Java
1int [][] n = {{1,4,5,10,12},{2,5,8},{3,9,12},{7}}; 2//整数の配列に1から12までの全ての整数が入っているかを判定するmethod を書きたいのですが、どうしたらいいかわかりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
1 1-12の数字に対応するフラグ12個を用意(すべてfalseで初期化)
2 配列を走査、見つけた数字に当該するフラグをtrueにしていく
3 フラグ12個がすべてtrueになっているかどうか判定する。
投稿2017/03/26 05:40
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
課題っぽいのでコードは書かず考え方を書きます。
まずは、プログラムで解くことを忘れ、そのまま例題を自分の頭と手で解きます。
もし例題が難しければ、解けるレベルまで落とします。
手順を覚えるかメモするかして、それを一つずつプログラムに置き換えます。
実行できそうだったら、条件が複雑でも通用するか考え、不足する部分の処理を考えます。
この方法は初心者向きの問題に関しては、大体において通用します。
質問の問題に適用すると。。。
問1.例えば1次元配列の中に1〜3の要素の内どの要素が入っているかを考えます。
問2.その考えは1〜12の要素に変更します。
問3.幾つかの配列を受取その中で1〜12の内どの要素がか入っているかを考えます。(完成)
問題を分割して考える方法は、プログラミングの基本的なテクニックでなので、がんばってください。
投稿2017/03/26 08:33
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/26 08:37
2017/03/26 11:58
2017/03/26 15:56
2017/03/26 16:07
2017/03/26 16:16
0
tell_kさんのコードを改良。元がStreamの利点を全く活かしてなかったので…
java
1static boolean isValidArray(int[][] ar){ 2 Set<Integer> set = Arrays.stream(ar).flatMapToInt(Arrays::stream) 3 .boxed().collect(Collectors.toSet()); 4 return IntStream.rangeClosed(1, 12).allMatch(set::contains); 5}
投稿2017/03/26 18:16
総合スコア20651
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
java
1import java.util.Arrays; 2import java.util.List; 3import java.util.stream.IntStream; 4import java.util.stream.Collectors; 5 6public class ArrayChceck { 7 public static void main(String[] args) { 8 int [][] n = {{1,4,5,10,12},{2,5,8},{3,9,12},{7}}; 9 System.out.println(isValidArray(n)); 10 } 11 static boolean isValidArray(int[][] ar){ 12 int[] flat = Arrays.stream(ar).flatMapToInt(Arrays::stream).toArray(); 13 List<Integer> flatList = IntStream.of(flat).boxed().collect(Collectors.toList()); 14 for (int a: IntStream.rangeClosed(1, 12).toArray()){ 15 if (!flatList.contains(a)) { 16 return false; 17 } 18 } 19 return true; 20 } 21}
投稿2017/03/26 07:37
編集2017/03/26 08:22総合スコア2120
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
git
1// 二次元配列の要素が1~12のすべてを含んでいるか判定するメソッド 2static boolean checkok(int[][] ar){ 3 HashMap<Integer, Boolean> hm = new HashMap<Integer, Boolean>(); 4 // mapを使って重複をなくす 5 for(int[] a: ar){ 6 for(int i: a){ 7 hm.put(i, true); // keyしか見ないのでtrueでもfalseでも同じ 8 } 9 } 10 // キーの存在をチェックし、なければfalse 11 for(int n = 1; n <= 12; n++){ 12 if(!hm.containsKey(n)) return false; 13 } 14 return true; 15}
こんな感じでどうでしょう?
HashMapクラス
https://docs.oracle.com/javase/jp/8/docs/api/java/util/HashMap.html
先頭に必要です
import java.util.*;
もっと短い版
// 二次元配列の要素が1~12のすべてを含んでいるか判定するメソッド static boolean checkok(int[][] ar){ HashMap<Integer, Boolean> hm = new HashMap<Integer, Boolean>(); // 範囲内ならマップに追加 for(int[] a: ar){ for(int i: a){ if(1 <= i && i <= 12) hm.put(i, true); } } // すべて満たされているか return hm.size() == 12; }
投稿2017/03/26 05:41
編集2017/03/26 06:13総合スコア868
0
以下のようにしたらよいのではないでしょうか(メソッドmeth)
java
1import java.util.*; 2class AP12{ 3 4public static void main(String[] args){ 5 6int [][] n = {{1,4,5,12},{2,5,8},{3,9,12},{7}}; 7 8meth(n); 9 10} 11 12static void meth(int[][] a){ 13 14ArrayList<Integer> b=new ArrayList<>(); 15 16for(int i=0;i<a.length;i++){ 17for(int n=0;n<a[i].length;n++){ 18 19b.add(a[i][n]); 20 21} 22} 23 24Collections.sort(b); 25 26if(b.size()==12 && b.get(11).equals(12)){ 27System.out.println("contains"); 28}else{ 29System.out.println("don't contains"); 30 31} 32 33} 34 35}
重複する時結果が違うようなので訂正しました 以下でできると思います
java
1import java.util.*; 2class AP12{ 3 4public static void main(String[] args){ 5 6int [][] n = {{1,4,6,10,11,12},{2,5,8},{3,9,12},{7}}; 7 8meth(n); 9 10} 11 12static void meth(int[][] a){ 13 14ArrayList<Integer> b=new ArrayList<>(); 15 16for(int i=0;i<a.length;i++){ 17for(int n=0;n<a[i].length;n++){ 18 19b.add(a[i][n]); 20 21} 22} 23 24Collections.sort(b); 25 26boolean v=true; 27 28for(int p=0;p<12;p++){ 29 30 31if(!(b.get(p).equals((p+1)))){ 32v=false; 33break; 34} 35} 36 37if(v){ 38System.out.println("contains"); 39}else{ 40System.out.println("don't contains"); 41 42} 43 44} 45 46}
投稿2017/03/26 05:29
編集2017/03/26 05:40退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。