print()状態を描くメソッドprint()を考えます。
取り敢えず塔に積まれているリングの番号をコンソールに表示することにしました。
まず
int rings = Math.max(Math.max(tower[0].size(), tower[1].size()), tower[2].size());
で三つの塔の中で一番リングが積まれている塔のリングの数を調べます。この文は
int tempMax = Math.max(tower[0].size(), tower[1].size()); int rings = Math.max(tempMax, tower[2].size());
を一文にまとめたものです。
次に外側のループ
for (int i = rings; i > 0; i--)
で塔に積まれているリングを上から順番に印字するようにしています。
例えばrings = 3ならば各塔の3番目に積まれているリング、2番目に積まれているリング、1番目に積まれているリングの順で表示していきます。
内側のループ
for (int j = 0; j < 3; j++)
でi番目に積まれているリングをtower[0]に積まれているリング、tower[1]に積まれているリング、tower[2]に積まれているリングの順で印刷させるようにしています。
ループの内側では
if (tower[j].size() <= i) { System.out.print(tower[j].elementAt(i - 1) + " "); } else { System.out.print(" "); }
でtower[j]にi番目に積まれているリングがある場合はその番号を表示し、ない場合は空白" "を表示させています。
内側のループを抜けたところで
System.out.println("");
と改行を行なっています。