ゆるゆるプログラミング

・配列値の反転

配列に格納されている値の順番を逆にする反転処理を行うプログラムを紹介します。

例えば、以下のように配列に値が入っているとき

 5, 7, 8, 1, 3, 2

配列の値を反転すると

 2, 3, 1, 8, 7, 5

となります。これが配列の反転処理です。

ここから、以下の配列を例に反転処理を説明していきます。

配列の反転処理 元データ1

反転処理は、配列の先頭と最後の値の入れ替えから始まり、先頭の次の値と最後の1つ前の値を入れ替え、その処理を配列の中心に向かって入れ替えを行っていきます。入れ替える回数は、配列要素数を2で割り小数以下を切り捨てた値です。

この例は、要素数が6なので、入れ替え回数は6÷2=3回となります。

配列の反転処理 値の交換1 配列の反転処理 値の交換2 配列の反転処理 値の交換3

このように配列の中心に向かっての値の入れ替えで、配列の値を反転することができます。

次の例は、要素数が7の配列です。入れ替え回数は7÷2=3.5の小数以下を切り捨てた3回となります。

配列の反転処理 元データ2

要素数奇数の場合は、真ん中の値は入れ替えの対象になりません。

以下は、配列の反転処理を行うソースコード例です。

ArrayReverse1.java ← クリックしてダウンロードページに移動
001:    public class ArrayReverse1 {
002:    	// 配列を反転するメソッド
003:    	private static void array_reverse( int[] values )
004:    	{
005:    		// 処理回数
006:    		int count = values.length / 2;
007:    		if ( 1 > count ) return;
008:    
009:    		// 交換位置
010:    		int s, e;
011:    
012:    		// 反転処理
013:    		s = 0;			// 先頭の添え字
014:    		e = values.length - 1;	// 最後の添え字
015:    		for ( int i = 0; i < count; ++ i ) {
016:    			// 交換処理
017:    			int w = values[ s ];
018:    			values[ s ] = values[ e ];
019:    			values[ e ] = w;
020:    
021:    			++ s;
022:    			-- e;
023:    		}
024:    	}
025:    
026:    	// メイン
027:    	public static void main( String[] args ) {
028:    		// 数値群
029:    		int[] values = { 5,7,8,1,3,2 };
030:    
031:    		// 配列の値を反転
032:    		array_reverse( values );
033:    
034:    		// 結果を確認
035:    		for ( int i = 0; i < values.length; ++ i ) {
036:    			System.out.println( values[ i ]  );
037:    		}
038:    	}
039:    }

ArrayReverse1の出力結果(配列値の反転)

2
3
1
8
7
5

ここからは、配列の反転処理のメソッドについて解説します。

002:    	// 配列を反転するメソッド
003:    	private static void array_reverse( int[] values )
004:    	{

配列を反転するメソッドarray_reverseを定義しています。引数にint型配列valuesを渡します。

このメソッドでは、配列valuesの値を変更します。新しい配列を作成しません。

005:    		// 処理回数
006:    		int count = values.length / 2;
007:    		if ( 1 > count ) return;

値を入れ替える回数をint型変数countに代入しています。回数は、配列valuesの要素数values.lengthを2で割った値です。これは整数割り算なので小数以下の値は、切り捨てになります。

countが0のとき、処理をする必要がないのでreturn文でメソッドを抜けます。

009:    		// 交換位置
010:    		int s, e;
011:    
012:    		// 反転処理
013:    		s = 0;			// 先頭の添え字
014:    		e = values.length - 1;	// 最後の添え字

入れ替えに使うint型変数sをeを宣言しています。

変数sには、配列の先頭の添え字 0を代入しています。

変数eには、配列の最後の添え字 values.length-1を代入しています。

015:    		for ( int i = 0; i < count; ++ i ) {
016:    			// 交換処理
017:    			int w = values[ s ];
018:    			values[ s ] = values[ e ];
019:    			values[ e ] = w;
020:    
021:    			++ s;
022:    			-- e;
023:    		}

for文でcount回のループを作成しています。そのループの中で、values[ s ]とvalues[ e ]の値を入れ替えています。また、変数sをインクリメント変数eをデクリメントし、入れ替えたい対象の添え字配列の中心に近づけています。

■関連コンテンツ

Javaの配列 同じ型の変数をまとめた配列について解説
for文 繰り返し処理に使用するfor文について解説
変数値の交換 2つの変数値を交換する方法を解説

■新着情報

2020.07.08 公約数 公約数
2020.07.08 最大公約数 1番大きい約数は?
2020.06.18 3つの値の最大最小 3つの値の最大/最小値
2020.06.03 円を描く(テキスト版) テキストを円を描く
2020.06.02 文字の間違い探し どの文字が違う?

■広告

フィギュア予約最大25%OFF+ポイント5%還元!ホビーサーチ

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

 

 

 

 

 

 

 

Topへ