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

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

新規登録して質問してみよう
ただいま回答率
85.46%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

595閲覧

int型の2次元配列に入っている数字の発生頻度が知りたい

Hikari

総合スコア0

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/06/05 15:23

int型の2次元配列に入っている数字の発生頻度が知りたい

ここに質問の内容を詳しく書いてください。
int型の2次元配列に入っている数字の発生頻度についてウェブサイトで調べてみてもよくわからないし、お手上げ状態です。わかりやすく教えていただけないでしょうか。こうすればよいなどのヒントが欲しいです。

発生している問題・エラーメッセージ

個数の位置がずれたり,0の頻度などすべてが反映されていない。

該当のソースコード

java

1/* 2課題053 3int型の2次元配列aには,0~4の整数値が格納されている. 4各整数値の頻度をint型の配列frequencyに格納せよ. 5先頭から,0の頻度,1の頻度,…,4の頻度とすること. 6 */ 7public class Kadai053 { 8 9 public static void printArray(int[] array) { 10 for(int i=0; i<array.length; i++) 11 System.out.printf("%d : %s\n", i, array[i]); 12 System.out.println(); 13 return; 14 } 15 16 public static void main(String[] args) { 17 int[][] a = {{2, 1, 1, 0, 2, 2, 3, 0}, 18 {1, 3, 0, 2, 3, 4, 3, 1}, 19 {4, 1, 3, 3, 3, 4, 0, 3}, 20 {0, 4, 4, 4, 2, 0, 4, 3}, 21 {3, 4, 1, 2, 0, 4, 4, 4}, 22 {3, 1, 1, 1, 0, 0, 3, 3}, 23 {3, 1, 4, 1, 4, 1, 4, 1}, 24 {3, 3, 4, 2, 2, 1, 4, 3}}; 25 26 int[] b=new int[5] ; 27 int d=0; 28 int e=0; 29 int s=0; 30 int h=0; 31 32 for(int i=0;i<a.length*b.length;i++) {//40 33 34 if(i%8==0) { 35 s++; 36 e++; 37 h=0; 38 } 39 h=s-1; 40 if(i>=8) { 41 i=i-8*s; 42 } 43 if(s>b.length) { 44 break; 45 } 46 h++; 47 for(int j=0;j<8;j++) { 48 System.out.println((e-1)+"\t"+j); 49 if(a[s-1][j]==(0)) { 50 d+=1; 51 b[s-1]=d/8; 52 } 53 //if(a[h-1][j]==e-1) { 54 //d+=1; 55 //b[s-1]=d; 56 //} 57 } 58 if(s>b.length) { 59 break; 60 } 61 62 } 63 64 int[] frequency=new int[b.length] ; 65 66 for(int i=0;i<frequency.length;i++) { 67 frequency[i]=b[i]; 68 } 69 70 printArray(frequency); 71 72 } 73 74}

試したこと

for文2個で納めれるようにして、出力できるようにした。

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

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

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

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

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

guest

回答2

0

正しい答えが出ているのであれば、それでいいと思います。

より短く(単純に)するのであれば、
0から4を順にチェックしていますが、よく考えるとa[i][j]の値がそのままfrequencyのインデックスに対応しています。
なのでこれで十分です。

Java

1public class Kadai { 2 public static void printArray(int[] array) { 3 for (int i = 0; i < array.length; i++) 4 System.out.printf("%d : %d\n", i, array[i]); 5 System.out.println(); 6 } 7 8 public static void main(String[] args) { 9 int[][] a = { { 2, 1, 1, 0, 2, 2, 3, 0 }, 10 { 1, 3, 0, 2, 3, 4, 3, 1 }, 11 { 4, 1, 3, 3, 3, 4, 0, 3 }, 12 { 0, 4, 4, 4, 2, 0, 4, 3 }, 13 { 3, 4, 1, 2, 0, 4, 4, 4 }, 14 { 3, 1, 1, 1, 0, 0, 3, 3 }, 15 { 3, 1, 4, 1, 4, 1, 4, 1 }, 16 { 3, 3, 4, 2, 2, 1, 4, 3 } }; 17 18 int[] frequency = new int[5]; 19 20 for (int i = 0; i < a.length; i++) { 21 for (int j = 0; j < a[i].length; j++) { 22 frequency[a[i][j]] += 1; 23 } 24 } 25 26 printArray(frequency); 27 } 28}

コーディング中はそれまでの考えに引きずられて、遠回りなコードになることがありますね。
わたしは、後で見返して「なんでこんな冗長なこと書いていたんだろう??」となることが、よくあります^^;

投稿2020/06/06 00:18

TN8001

総合スコア9383

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

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

0

自己解決

public class Kadai {
public static void printArray(int[] array) {
for(int i=0; i<array.length; i++)
System.out.printf("%d : %s\n", i, array[i]);
System.out.println();
return;
}

public static void main(String[] args) { int[][] a = {{2, 1, 1, 0, 2, 2, 3, 0}, {1, 3, 0, 2, 3, 4, 3, 1}, {4, 1, 3, 3, 3, 4, 0, 3}, {0, 4, 4, 4, 2, 0, 4, 3}, {3, 4, 1, 2, 0, 4, 4, 4}, {3, 1, 1, 1, 0, 0, 3, 3}, {3, 1, 4, 1, 4, 1, 4, 1}, {3, 3, 4, 2, 2, 1, 4, 3}}; int[] frequency=new int[5] ; int k=0; for(int fre=0;fre<frequency.length;fre++) { k=0; for(int i=0;i<a.length;i++) {//tate for(int j=0;j<a[i].length;j++) {//yoko if(a[i][j]==fre) { k+=1; frequency[fre]=k; } } } } printArray(frequency); }

}

出力結果
0 : 9
1 : 14
2 : 8
3 : 17
4 : 16

自己解決することができました。自分に甘えてしまい、丸投げしてしまいました。大変申し訳ございません。
自分で考えて理解しないと自分のためにもならないので回答してくださらなかったみなさんありがとうございます。もし、このようにするともっと短い文で表せるなどがありましたらお願します。

投稿2020/06/05 16:16

Hikari

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問