はじめは, diskdigger.zip 。このソフト, exe 単体で使えて,インストール不要。よかったんだけど,ファイル名が復旧されずに,セクタ名で表示されちゃってネ。しかも,復元力が強力なのはいいんだけど,半端なファイルもすべてサムネイルで見せてくれるので,取捨選択が煩雑になりそうだったので, Give up 。なんせ, 1000 枚近く見つかったもんでさ。
質問文中のプログラムには,まず,何よりもまず最後に } が2つ必要である。さらに,変数の型宣言が for ループの中に入ってしまっているから,これを外に出さないといけない。こんな具合 ( Sample1.java )。これで,コンパイルは通る。これは,私の間違い。もう一度確認してみた。型宣言が中にあっても,一般には通る。しかし, for ループの中が空のときは通らないようだ。
さらに,追記(汗)―― Sample2_1 は通るが, Sample2_2 は通らない。考えるに, JAVA のコンパイラはお利口さんで, for ループが空だと実質何も行わずに無視するのだろう。したがって,インデックスの宣言と値代入が同位置だと, for ループが空の場合,そこが無視されているから,型宣言が行われていないことになって,あとの print 文の変数が未宣言になってエラーが出ると見た。多分,これで正解。したがって,通常は,インデックスの型宣言は for 文の中で構わないことになる。――追記,ここまで。
しかし, (int i=1; 1/i<=500; i++) ってどういう意味だろう。多分,条件と for ループの中でやるべき処理とがごっちゃになったんだろう。しかし, 1/i で i が int だと計算結果も int で 1/2 からはずっと 0 になるわけだから,ナンジャラホイということになってしまう。プログラムを実行可能にするためには,せめて, (int i=1; i<=500; i++) じゃないといけない ( Sample2.java )。
さて,空っぽの for ループの中になにか処理することを入れないといけない。 i をインクリメントさせて, 1/i を加えていくわけだから,計算結果を記憶させる変数が必要だ。彼の考えに沿って行くと, int j=0; を宣言しておいて使うということになるだろう ( Sample3.java )。しかし,これの実行結果は, 1 になる。ここまで来て,「実行結果があやふやなことになりました」というんなら納得できるんだけどな。なんでこんな結果になるかというと,型が int だからだ。 i が整数型だから, JAVA だと, Sample3.java の 1/i の場合, 1/1 以外はすべて 0 になるはずだ。