dポイントプレゼントキャンペーン実施中!

このif文がわからないので優しい方教えてください!

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int values[] = new int[10];

for (int i = 0; i < 10; i++)
values[i] = Integer.parseInt(br.readLine());
for (int i = 0; i < 10; i++) {
for (int j = i + 1; j < 10; j++) {
if (values[i] > values[j]) {
int t = values[i];
values[i] = values[j];
values[j] = t;
}
}
}
for (int i = 0; i < 10; i++)
System.out.println(values[i]);
}
}

A 回答 (4件)

このプログラムではまず十回キーボードから数値を入力してvalues[]に入れます


そこでfor (int i = 0; i < 10; i++) {
で10回for文を回し その中で
for (int j = i + 1; j < 10; j++)  を回す事で常に
jがiより1以上大きく10よりは小さい状態を作り出しています
ここでvalues[i]>values[j]の時
int t = values[i]; //values[i]の値を一時tに置く
values[i] = values[j];//values[i]内にvalues[j]の値を入れる
values[j] = t;// values[j]に元values[i]内の値を入れる

values[i]とvalues[j]
の値が交換され
values[i]<values[j]
に変化します
jが9になるまでvalues[i]>values[j]の時values[i]とvalues[j]の値を交換し続け これをiが0-9まで続けると
values[]は常にvalues[i]<values[j]になり
values[]の中身をvalues[0]から順に並べると
小さい順に並んでいる結果が見える事になります

頭から並んだ数を一つ一つ比較してゆき、常に小さい方を前にしてゆくのを全ての数について行うと結果的に一番小さい数が一番前に一番多い数が一番後になるまで昇順に並べ替えられるということです
    • good
    • 0

単なるバブルソートだと思うけど


if がわからないというのはどういう意味でしょう?
文法的にifの意味が分からない? それとも アルゴリズムの動作原理の話?
    • good
    • 0

どういう意味でわからないのかが、わからないのですが一応...




これは、並べ替え問題だと思われます。
valuesという配列が4行目で準備されています。その配列の部屋数は10個(0〜9)です。
最初のfor文で、valuesの中身を入れています。
2番目と3番目のfor文で、チャンピオン(i)と、チャレンジャー(j)を決めています。
イメージ↓
△○
↓↓
□□□□□□□□□□
0 1 2 3 4 5 6 7 8 9 (△=i,○=j)
で、昇順に並び替えなので、このif文では、
「チャンピオンの方が、チャレンジャーよりも大きいですか」と
聞いています。もし、その質問の回答が「yes」だったら、
下の3行をしていき、「no」だったら、何もせずに、
3番目のfor文にjに+1しながら、戻ります。
そして、ずっと、その工程を繰り返ししたら、
いつしか、2番目のfor文を抜けます。
そしたら、最後のfor文で、並べ替えをしたvaluesを
表示する作業に入ります。

みたいな感じです。
    • good
    • 0

valuesは1次元配列。


 iとjはvaluesの参照場所を決めるカウンタ。
 iは0オリジン。jは1オリジン(i+1となっているから)
 if文ではvaluesのiで参照される場所に入ってる値と、jで参照される場所(=iで参照される場所の一つ先の場所)に入ってる値の比較をしている。

参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!