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

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

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

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

Q&A

解決済

1回答

3642閲覧

2次元配列から要素を抜き出す範囲を決める2点を返したい

adze1610

総合スコア14

Java

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

0グッド

0クリップ

投稿2015/09/13 11:23

編集2015/09/13 11:50

Javaで1次元配列のデータを2次元配列に並べ替え、置き換えた2次元配列から、2点を定めその中の範囲を、再び1次元配列に並べ替えるプログラミングをしております。

class namadata {
public static void motodata () {
byte [] data = new data[120] { 1, 2 ,3,…,120};
}
}

class data2D {
public static void nijigenka(byte[] data,byte[][] data2D) {
for(byte i = 0; i < 10; i++) { // タテとする
for(byte j = 0; j < 12; j++) { // ヨコとする
data2D[i,j] = data[i * 12 + j];
}
}
}
}

上記のように元データの1次元配列を2次元配列化しました。その中から2点を選び、2点中の範囲のデータを再び1次元配列に置き換えたいと考えています。

例えば選んだ2点の座標がそれぞれ{1,2}{3,5}とします。
その場合、1次元配列に置き換える対象となる要素は{{1,2}{1,3}{1,4}{1,5}{2,2}{2,3}{2,4}{2,5}{3,2}{3,3}{3,4}{3,5}}となるようにしたいのです、そして再び1次元配列化したいです。

そのため選ぶ2点の座標を、引数として返し、メインメソッドでそれぞれの座標を入力できるようなメソッドしたいのですが、どのようにコーディングしていいのかよくわかりません。わからないなりに書いたコードは以下のコードです。

class Pickdata {
public static void pdata() {
for(byte y = y1; y < y2; y++) { // y2は2点のうち大きい方、y1は小さい方のタテ座標
for(byte x = x1; x < x2; x++) { // // x2は2点のうち大きい方、x1は小さい方のヨコ座標
data[x * 12 + y] = pdata[x, y];
}
}
}
}

あまりに初心者ゆえ、いろいろとおかしなことを言っているかと思いますが、一緒に考えてくださるととてもうれしいです。どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずこれらを別クラスに分ける必然性は見られないので,1つのクラスに実装します.
それぞれのメソッドについて考えましょう.
まず最初の配列初期化はこれではダメで,その後の{}を使ったやり方もコードが長くなりすぎるので,
forで回して初期化します.

java

1byte[] data = new byte[120]; 2for(int i = 0; i < 120; i++){ 3 data[i] = (byte)(i + 1); 4}

次に,2次元配列を用意して並び替えをします.インデックスをいちいち計算するのはロスが大きいので,インデックス値をインクリメントして入れていきます.

java

1byte[][] data2D = new byte[10][12]; 2int n = 0; 3for(int i = 0; i < 10; i++){ 4 for(int j = 0; j < 12; j++){ 5 data2D[i][j] = data[n]; 6 n++; 7 } 8}

これをメソッドとして切り出す場合は,必要な情報はもとのdataで,結果を2次元配列で返せばいいので,

java

1public static byte[][] nijigenka(byte[] data){ 2 //上のコードが入る 3 return data2D; 4}

こうなります.
主題の「特定範囲の数値を取り出して1次元化」ですが,開始地点と終了地点がわかればその中のデータ数が確定するので,その数で配列を初期化します.あとは範囲内の数値を取り出して格納していくだけです.

java

1public static byte[] pickData(byte[][] target, int startX, int startY, int endX, int endY){ 2 byte[] result = new byte[(endX - startX + 1) * (endY - startY + 1)]; 3 int n = 0; 4 for(int i = startY; i < endY; i++){ 5 for(int j = startX; j < endX; j++){ 6 result[n] = target[i][j]; 7 n++; 8 } 9 } 10 return result; 11}

投稿2015/09/13 12:44

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問