何となく、「プログラミング全体像自体が理解できていない」と思うので、そこから説明します。
プログラミングは「こう書けばいい」ではありません。
「プログラムは魔法でもなんでもなく、人間が現実世界でやっている手順を、逐一指示されながら処理利しているだけの代物である」です。
簡単に言えば『現実世界のシミュレーション』です。
とりま、プログラミングとかそういうのを置いといて、現実世界でならどうするか考えてみてください。
今回は、
[現実の課題]
1から100までの数字を一つ一つ見ていきながら、nの倍数をホワイトボードに書いていく。
ただし、nは変更できるようにしておく。(場合によっては n = 2, 場合によっては n = 6 となる)
という感じでしょうか。
これを算数かなんかの問題として出されたと考えてみてください。
私なら、
1. 数字を挙げていく( 1, 2, 3, ... 100 )
1.1. 数字が nの倍数なら
1.1.1. ホワイトボードに書く
的なロジックになりますね。
(1.1) はそのままだと計算できないので、言い換えてみましょう。
まず、n = 2 だとします。
では、2の倍数とそうでないものを列挙してください。
2の倍数 = { 2, 4, 6, 8, 10 ... }
それ以外 = { 3, 5, 7, 9, 11 ... }
(※ 1 は除外して考えています)
では、ここから規則性を見付けてみてください。
計算してみると 2の倍数の場合は「2で割り切れる」、それ以外は「2で割ると必ず余りが出てくる」ですね。
ということで、数字を n で割ったときの余りが0かどうかで判断できますね。
で、ここまではできているという前提で書きます。
次は『デバッグ方法』です。
デバッグ方法には何種類かありますが、まずは『コードを読む方法』を提示します。
コードを読むコツは、「一行レベルで、何をしているかを考えながら読む」です。
たとえばコメントにするとかです。
// 引数n を受ける baisuメソッド
public void baisu(int n){
// 変数 iの初期値: 1, i が 100以下の間, ループしながらインクリメント
for(int i = 1; i <= 100; i++) {
// i が 6 で割り切れるなら
if(i % 6 == 0){
// n を表示
System.out.println(n);
}
}
}
ですね。
では、これを疑似コードとして抜き出してみましょう。
0. ( n は引数とする )
1. 変数 iの初期値: 1, i が 100以下の間, ループしながらインクリメント
1.1. i が 6で割り切れるなら
1.1.1. n を表示
この疑似コードをもとに、実際に手を動かしてやってみましょう。
引数として渡すのが 6 だとします。そのため、 n = 6 となりますね。
(1) によって、 i = 1 からスタート。
(1.1) で i % 6 == 0 を条件に見てみる。
i = 1 なので、1 % 6 == 0 ですね。満たしますか? 電卓で計算すると 0.16... と言う風に割り切れませんね。
なのでスルー。
(1)に戻って i++ により、 i + 1 = 1 + 1 = 2 よって、i = 2。
そして、(1.1) ですが、 2 % 6 == 0 は満たしますか? 割り切れませんね。
なのでスルー。
(1)に戻って i++ = i + 1 = 2 + 1 = 3。
... とやっていき、
i = 6 のときに (1.1) で 6 % 6 == 0 は満たすので、(1.1.1) に行く。
なので、 nである6をホワイトボードに書く。
... と、またi = 12 のときを見ます。
ですね。(1.1)で 12 % 6 == 0 は満たすので (1.1.1) に行く。
つまり、nの値を書く。
n = 6 なので 6 と書く。
...と言う風になっています。
あれ????? なんで n の値を出力しているのでしょうか。普通、刻々と変換している i の値を出力するのでは?
私達は何をしようとしていましたっけ? 確か、「6の倍数の数字を書く」とかだったのでは?
そういう風にロジックを追っていくと、なぜ失敗したのかがわかりますよ。
デバッガを使う方法とかもありますが、これも発想自体は同じです。
[追記1]
ちなみに、これが「3の倍数」とかになったらどうなるでしょうか。
if( i % 6 == 0 ) の部分の条件式を書き直さないといけないはずです。
そこで、引数 n として与えられたものを使います。( n の意味が「個数」とか別のものだと話が変わってくるが、今回は「nの倍数」の意味で言っているので )
では、単純に計算してみてください。
2の倍数 => i % 2 == 0
3の倍数 => i % 3 == 0
4の倍数 => i % 4 == 0
...
なにかに気づきませんか?
そう、i % <N> == 0 となっていますね。(抽象度を上げると)
<N> は使える範囲で考えると 引数 n ですね。
後はわかりますね?