Java初心者が2つの配列を1つの配列に結合する方法

このQ&Aのポイント
  • Java初心者の方が、配列を結合する方法について質問しています。
  • 具体的には、private static int[] concat(int[] ia1, int[] ia2) というメソッドを使い、2つのint型配列を連結させる方法について教えて欲しいとのことです。
  • また、その結果として得られる配列を表示するために、メインメソッド内でテスト用の配列を作成していることも説明されています。
回答を見る
  • ベストアンサー

2つの配列を1つの配列にする。

JAVA初心者です。1日に何度も質問してしまってすいません。 問題 private static int[] concat(int[] ia1, int[] ia2) のメソードを使いarray1とarray2[の2つの配列が両方intのとき、array1 array2と続く配列を表示する。 private static int[] concat(int[] ia1, int[] ia2) { int e; for (e=0; e < ia1.length; e++) { } for (e=0; e < ia2.length; e++) { }     return new int[0]; } public static void main(String[]args){ int[] testIntArray1 = {1, 2, 8, 4}; int[] testIntArray2 = {99, 88, 77, 66}; // You should also test the case where the first // array is empty, the second array is empty, and // both arrays are empty. System.out.println("First test array for concat is: "); int e; for (e=0; e < testIntArray1.length; e++) { System.out.print(testIntArray1[e] + " "); } System.out.println(); System.out.println("Second test array for concat is: "); for (e=0; e < testIntArray2.length; e++) { System.out.print(testIntArray2[e] + " "); } System.out.println(); int[] result = concat(testIntArray1, testIntArray2); System.out.println("Result of concat is: "); for (e=0; e < result.length; e++) { System.out.print(result[e] + " "); } System.out.println(); //*********************************************************** 結果 First test array for concat is: 1 2 8 4 Second test array for concat is: 99 88 77 66 Result of concat is: 1 2 8 4 99 88 77 66 ←2つの配列分の値。 メインはなんとかできたのですが、まだ始めたばかりで配列などの仕組みも基本的なことしか分りません。どのようにしたら2つの配列をひとつの配列に1番目の配列、2番目の配列の順に収める事ができるのでしょうか。キーワードなどのアドバイスよろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

考え方としては以下のようになります。 (1)配列1の要素数をX、配列2の要素数をYとする。 (2)要素数X+Yの配列を定義する。これを新配列と呼ぶ。 (3)新配列[0]~[X-1]に配列1[0]~[X-1]を代入 (4)新配列[X]~[X+Y-1]に配列2[0]~[Y-1]を代入 private static int[] concat(int[] ia1, int[] ia2) {   int x = ia1.length; //配列1の要素数   int y = ia2.length; //配列2の要素数   int[] sin = new int[x + y]; //新配列の定義   int d = 0; //新配列用のインデックス   for( int i = 0 ; i < x ; i++ ) sin[d++] = ia1[i];   for( int i = 0 ; i < y ; i++ ) sin[d++] = ia2[i];   return sin; } 配列の要素数を途中で増やしたり、減らしたりできないので、通常は List等のオブジェクトを使います。個人的にはこっちを勧めたい。 http://java.sun.com/javase/ja/6/docs/ja/api/index.html?java/util/List.html http://www.hellohiro.com/list.htm

maman19
質問者

お礼

即効のご解答ありがとうございました! 新配列というのがあるんですね。 for( int i = 0 ; i < x ; i++ ) sin[d++] = ia1[i];   for( int i = 0 ; i < y ; i++ ) sin[d++] = ia2[i]; のところがよく理解できないので、もう一度リサーチして調べます。 本当にありがとうございました!

関連するQ&A

  • 配列について

      class Array01{ public static void main(String[] args){ int[][] ia = {{11,12},{21},{41,42,44}}; for(int i = 0; i < ia.length; i++){ for(int j = 0; j < ia[i].length; j++ ){ System.out.print(ia[i][j] + " "); } System.out.println(); } } } } (i < ia.length) と (j < ia[i].length)のとこの意味が分かりません。特にiaとia[i]の違いなんか教えてもらえると助かります。for文については理解してるんですが・・・

    • ベストアンサー
    • Java
  • 配列で負数がない場合-1を戻り値に設定する

    こんにちは、JAVAプログラミング初心者です。 問題 private static int indexOfFirstNegativeNumber(int[] intArray)のメソードを使って配列の中にある一番初めの負数のインデックスナンバーを表示、負の数が無ければ戻り値は-1 public class assingment7 { public static int x; private static int indexOfFirstNegativeNumber(int[] intArray) { for (x=0;intArray[x]>0 ; x++) { } return x ; } public static void main(String[]args){ // Testing indexOfFirstNegativeNumber System.out.println("Testing indexOfFirstNegativeNumber\n"); int[] testIntArray = {1, 13, -5, 0}; System.out.print("Test array is: " ); for (x=0; x < testIntArray.length; x++) { System.out.print(testIntArray[x] + " "); } System.out.println("\nIndex of first negative number returns: " + indexOfFirstNegativeNumber(testIntArray)); System.out.println("\n***************************"); } } 結果 *************************** Testing indexOfFirstNegativeNumber Test array is: 1 13 -5 0 Index of first negative number returns: 2 *************************** 最初の負数がはいっているインデックスを表示する事はできたのですが、数字が全部負数でない場合-1を返すというやり方がいろいろ試してみましたか頭がこんがらがるだけで、できませんでした。アドバイスよろしく願いします!

    • ベストアンサー
    • Java
  • 多次元配列の処理について

    多次元配列を扱った処理を行ないたいのですが、一部でnullを受け取ってしまい、処理を行うことができません。 引数の配列には次のようなテキストが入っています。 --配列の内容-- 0,名詞-一般,1,5, 0,名詞-数,2,6, 0,名詞-接尾-助数詞,3,7, -------------- この配列をコマンドラインに書き出すと正確に表示されます。 しかし、配列の内容を参照して処理を行なうと2列目の処理のときにnullを参照してしまいます。 プログラムは以下のとおりです。 ---プログラム--- public class Dist {   public static int zairyo(String[][] date) {    int a = 0;    int b = 0;    int c = 0;    int d = 0;    int e = 0;    if(date != null) {     int f = 0;     System.out.println("//Dist//");     for(int m = 0; m < date.length; m++) {      for(int n = 0; n < date[0].length; n++) {       if(date[m][n] != null) {        System.out.print(date[m][n] + "\t");        f++;        if(f == date[0].length) {         System.out.println("");         f = 0;        }       }      }     }     for(int i = 0; i < date.length; i++) {      if(date[i][1] != null) {       if(date[i][1] == "名詞-一般")        a++;       if(date[i][1] == "名詞-数")        b++;       if(date[i][1] == "名詞-接尾-助数詞")        c++;      }else System.out.println("2列目null");     }     int j = date.length - 1;     d = Integer.parseInt(date[j][2]);     e = Integer.parseInt(date[j][3]);    }else System.out.println("Dist:null");    if(a > 0 && b > 0 && c > 0 && d <= 10 && e <= 15) {     return 1;    }else return 0;   } } ------------------------ 原因は何なのでしょうか? ご教授お願いします。

  • 配列について

    class Sample1{ public static void main(String args[]){ int test[] = {89,56,56,77,54}; for(int i =0; i < test.length; i++){ System.out.println((i+1) + "番目の数は" + test[i] +"です。"); } } } >System.out.println((i+1) + "番目の数は" + test[i] +"です。"); の位置のtest[i]ってどこから来たんでしょうか? iには1番目とか2番目などといったものを出力するためにあるのであって、いつの間に89,56,56,77,54といった値が代入されのでしょうか?なんか漠然とした質問なんですがお願いします。

    • ベストアンサー
    • Java
  • CSVファイルを多次元配列に格納する

    CSVファイルをopenCSVを読み込んでその行と列の要素数の多次元配列を作りその配列にデータを格納したいです。 しかし、データが格納できません。2回目の格納するためにwhileから何かおかしいのではないかと思っています。 なにかわかる方、アドバイスが欲しいです。 public class ReadCSV { public static void main(String[] args){ try{ CSVReader reader = new CSVReader( new FileReader("/home/masa/Desktop/WameiSample.csv")); //配列の宣言 String[] nextLine; //データを配列に入れる要素数を見る int j = 0; nextLine = reader.readNext(); int k = nextLine.length; System.out.println("列数[i]"+k); System.out.println("nextLine"+nextLine); while((nextLine = reader.readNext()) != null){ for (int i=0; i<nextLine.length; i++){ //System.out.print(nextLine[i] + "|" + i + "|"); } //System.out.println(); j++; } System.out.println("行数[j]"+j); //記憶する配列 String[][] Wamei = new String[k][j]; System.out.println("きてるよ"); //データを配列に格納していく int x = 0; while((nextLine = reader.readNext()) != null){ System.out.println("きてるよ");  <---こっから、表示してくれない. for (int y=0; y<nextLine.length; y++){ Wamei[x][y] = nextLine[y]; //多次元配列の要素を表示する System.out.print(Wamei[x][y]+"Wamei"+x+y); } System.out.println(); x++; } } catch (IOException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • 配列を後ろから数えるには?

    例えば配列を前からならこのようになるはずです class TestIntArray { public static void main(String args[]) { int vi[] = {0, 1, 2, 3, 4, 5, 6}; for (int i = 0; i < vi.length; i++) System.out.println("vi[" + i + "] = " + vi[i]); } ですが逆に配列を後ろからならどうしたらいいのでしょうか? 今回の場合は6543210を出力させるのが目的です 今までずっと配列って言ったら for (int i = 0; i < vi.length; i++)がほぼ定形分ように頭にはいっていますので考え方がわからないです。 ヒントやアドレスをお願いします。

    • ベストアンサー
    • Java
  • 文字化けの対処方法を教えてください。

    public class test10 { public static void main(String[] args) { int[] array1 = { 9, 8, 7, 6, 5 }; int[] array2 = { 1, 2, 3 }; System.out.println("array1縺ョ隕∫エ "); for (int val : array1) { System.out.println(val); } System.out.println("array2縺ョ隕∫エ "); for (int val : array2) { System.out.println(val); } System.out.println("array2繧誕rray1縺ォ莉」蜈・縺吶k縺ィ"); array1 = array2; System.out.println("array1縺ョ隕∫エ "); for (int val :array1) { System.out.println(val); } System.out.println("array2縺ョ隕∫エ "); for (int val :array2) { System.out.println(val); } System.out.println("array2縺ョ シ堤分逶ョ縺ョ隕∫エ 繧 5縺ォ縺吶k縺ィ"); array2[1] = 5; System.out.println("array1縺ョ隕∫エ "); for (int val : array1) { System.out.println(val); } System.out.println("array2縺ョ隕∫エ "); for (int val : array2) { System.out.println(val); } } } いつも大変お世話になっております。 文字化けエラーの件。 shift-jisでもUTF-8でも文字化けします。 エディターはAtomを使っています。 何か対処方法はないでしょうか? ご多忙中恐れ入ります。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • 配列を使った・・・。

    配列を使って簡単な迷路を作っているのですが、なかなかうまくいきません。 0を" "1を"■"を表示させたいのですがうまくいきません。 何処を直せばいいのか教えてください。 public class Sample1 { public static void main (String[]args) { int [][] data = { {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1}, {1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1}, {1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1}, {1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1}, {1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; for (int i=0; i<10; i++) { for (int j=0; j<20; j++) { System.out.print(data [i][j]); } if(data [i][j] = 1){ System.out.println("■"); }else{ System.out.println(" "); } } } }

    • ベストアンサー
    • Java
  • 配列のインデックス番号を返したいが

    インデックス番号を返したい x[0]=1 x[1]=2 x[2]=3 x[3]=3 x[4]=5 の場合で探す(返す)値を3とした場合⇒2,3と値が返るようにしたい import java.util.*; class Test7_23 { static int[] arraySrchIdx(int[] a,int x){ int idx = 0; for(int i=0;i<a.length;i++){ //A if(a[i]==x){ a[i] = i; idx++; } else{ a[i] = 0; } } for(int i=0;i<a.length;i++) //B System.out.println(a[i]); int[] b = new int[idx]; for(int i=0;i<a.length;i++){ if(a[i] != 0) for(int j=0;j<idx;j++) b[j]=a[i]; } for(int i=0;i<idx;i++) System.out.println("b["+i+"]="+b[i]); return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("配列の要素数は:"); int n = std.nextInt(); int[] x = new int[n]; for(int i=0;i<n;i++){ System.out.print("x["+i+"]="); x[i] = std.nextInt(); } System.out.print("探す値:"); int a = std.nextInt(); int[] b = arraySrchIdx(x,a); for(int i=0;i<b.length;i++){ System.out.println(b[i]); } } }

  • 多次元配列のソートがうまくいかない

    多次元配列のソートがうまくいかない 質問失礼します. 以下のような,String型,int型,double型の混在した多次元配列([3][3]の配列)をソートするプログラムを作成しました. このプログラムでは3番目の項目でソートを行っています. 問題点なのですが, 3番目の項目がdouble型の一桁(例えばarray[1][2]が2.0)ならばうまくソートできるのですが, 一つを2桁(例えばarray[1][2]を10.0)にすると何故か先頭の数(10.0の場合1)を基準にソートされてしまっているようです・・・ 配列へのデータの入れ方が間違っているのでしょうか? 原因がはっきりわからず困っているのですが, わかる方いましたらよろしくお願いします. public class Sort_test { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String[][] array = new String[3][3]; array[ 0 ][ 0 ] = "A"; array[ 0 ][ 1 ] = 2001+""; array[ 0 ][ 2 ] = 9.0+""; array[ 1 ][ 0 ] = "B"; array[ 1 ][ 1 ] = 1001+""; array[ 1 ][ 2 ] = 2.0+""; array[ 2 ][ 0 ] = "C"; array[ 2 ][ 1 ] = 3001+""; array[ 2 ][ 2 ] = 6.0+""; TheComparator comparator = new TheComparator(); // 3番目の項目でソートするように設定 comparator.setIndex( 2 ); // ソート実施 Arrays.sort( array, comparator ); dump(array); } public static void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } } //多次元配列ソート用クラス class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } }

    • ベストアンサー
    • Java