ページ 11

javaの配列の内容をソートするところで・・・

Posted: 2012年9月24日(月) 00:01
by mi_l
javaの参考書を買って勢いよく読み出したのですが案の定配列で止まりました・・

javaの配列の内容をソートするところなのですが・・・

(とりあえずソース(class名は気にしないでください))

コード:

import java.io.*;

class kazuate
{
	public static void main(String[] args) throws IOException
	{
	BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
	
	int[] test = new int[5];
	
	System.out.println("5人の点数を入力してください");
	
		for( int t= 0 ; t<test.length ; t++ )
		{
			String str = br.readLine();
			test[t] = Integer.parseInt(str);
		}
	
	for( int x = 0 ; x < test.length-1 ; x++ )
	{
		for( int y = x+1; y<test.length ; y++ )
		{
			if( test[y] > test[x] )
			{
				int tmp = test[y];
				test[y] = test[x];
				test[x] = tmp;
			}
		}
	}
	
	for( int i = 0 ; i < test.length ; i++ )
	{
		System.out.println( (i+1)+ "位の点数は" + test[i] + "です");
	}
	
	}
}
のソートの部分がわかりません・・・

私の捉え方では・・

仮にtest[0] = 80: , test[1] = 100;とします。

そしてまず変数tmpを宣言し、test[1]の中に格納・・・
ここでtest[1]の中はtmp = 100;となっています。

そしてtest[1] = test[0];でtest[1]をtest[0]つまりひとつ前のアドレスに格納しました。
そしてtest[0] にtmpが入りtmp= 100なのでtest[0]の中身は100になりました・・・というのが私の捉え方なのですがここまででおかしなところがありましたらご指摘ください。
そして、ここからが疑問なのですが、上の文でtest[1]の値100はtest[0]に移動しました、そしてtest[1]には何もない状態になるのですか?ここでは入れ替えると書いてありましたので入れ替えが行われるのだと思うのですが、

if( test[y] > test[x] )
{
int tmp = test[y];
test[y] = test[x];
test[x] = tmp;
}
の部分には格納しているだけでもともとtest[0]にあった80はtest[1]に移動してないように思えるのですが・・・

なんで移動されるのですか?

そしてtmpを宣言しないで
test[y] = test[x];
だけでもいいのではないかと思い実行しましたがうまくいきませんでした。
なんでtmp(何かしらを)宣言する必要があるのでしょうか?

教えてくださいお願いします。
長文しつれいしました。

Re: javaの配列の内容をソートするところで・・・

Posted: 2012年9月24日(月) 00:47
by box
mi_l さんが書きました:

コード:

			if( test[y] > test[x] )
			{
				int tmp = test[y];
				test[y] = test[x];
				test[x] = tmp;
			}
仮にtest[0] = 80: , test[1] = 100;とします。
test[1] > test[0]が成立しているので、if文の中を実行します。
まずは、test[1]の値(100)をtmpに一時保管します。このあたり、もしかすると質問者さんは考え違いをされているかもしれません。
この時点で、tmp=100, test[0]=80, test[1]=100です。
次に、test[0]の値をtest[1]に代入します。
この時点で、tmp=100, test[0]=80, test[1]=80です。
最後に、tmpに一時保管してあった値(もともとのtest[1])をtest[0]に代入します。
この時点で、tmp=100, test[0]=100, test[2]=80です。
どうですか?test[0]とtest[1]とがちゃんと入れ替わっていますね。

Re: javaの配列の内容をソートするところで・・・

Posted: 2012年9月24日(月) 00:56
by mi_l
ありがとうございます。!!

ものすごいスッキリしました!!

教えていただきありがとうございます。

なにかしらの一時的に保存するための変数(ここではtmp)がないとダメということですね。