アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のコードで
バブルソートをする前とし終わった後の配列の中身を出力しているのですが、
ソートをしている課程についても都度出力したいです。

バブルソートのfor文の中だとは思うのですが、想定通り出力されなかったため
どこにどうシステムアウトを加えたらよいかご教示いただきたいです。

public class test{
public static void main(String[] args){
int[] a = { 2, 3, 6, 5, 9, 1, 4, 7, 8 };

for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();

//バブルソート
for (int i = 0; i < a.length - 1; i++) {
for (int j = a.length - 1; j > i; j--) {
if (a[j - 1] > a[j]) {
int x = a[j - 1];
a[j - 1] = a[j];
a[j] = x;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
}

質問者からの補足コメント

  • 失礼しました。
    想定は、

    初めの状態の配列の中身を全て出力
    1回目のソートで並び替えられた配列の中身を全て出力
    2回目のソートで並び替えられた配列の中身を全て出力

    ソートが完了した配列の中身を全て出力

    です。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/08/26 16:28
  • ありがとうございます!
    全部の過程を出力したいので、書く位置はおっしゃるとおり
    a[j] = x;
    の直後になり、これは分かるのですが
    System.out.println();
    の()の中はどう書いたらよいのでしょうか…?

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/08/26 16:31
  • HAPPY

    if文の中にさらにfor文を足したらできました、すみません。
    ありがとうございました!

      補足日時:2021/08/26 16:52

A 回答 (4件)

多分 バブルソートを始める直前と


バブルソートの一番外側のループの最後に
ダンプコードを置くのが良いと思う。

ちょっと見にくいかもだけど
Javascript風の出力なら
System.out.println(Arrays.toString(a))
の一行でOK。
これが気に入らないなら
適当なダンプルーチンをメソッドとして実装しよう。
    • good
    • 1

>1回目のソートで並び替えられた配列の中身を全て出力


結局、「ソート」が
データ交換の意味なのか、
現段階の最小値をひねりだすまで処理することなのか
解らんので不明瞭
    • good
    • 1

想定を書いて下さい。

この回答への補足あり
    • good
    • 1

こんにちは



全部の過程を出力したいのなら、内側のforループの最後に出力を行えばよいです。
ただし、この場合は配列の内容が変化していないこともありますし、出力行数もそれなりになります。

「変化したら出力したい」のなら、入れ替えを行うごとに出力すればよいので、if文で入れ替えを行った直後に出力を行えばよいでしょう。
この回答への補足あり
    • good
    • 1

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