javaの配列の内容をソートするところで・・・
Posted: 2012年9月24日(月) 00:01
javaの参考書を買って勢いよく読み出したのですが案の定配列で止まりました・・
javaの配列の内容をソートするところなのですが・・・
(とりあえずソース(class名は気にしないでください))
のソートの部分がわかりません・・・
私の捉え方では・・
仮に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(何かしらを)宣言する必要があるのでしょうか?
教えてくださいお願いします。
長文しつれいしました。
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(何かしらを)宣言する必要があるのでしょうか?
教えてくださいお願いします。
長文しつれいしました。