public static void main(String[] aaaa)と書いても問題なく動きます. ただC言語で,main関数に渡るコマンド引数の名前を argv(argument vectorの略だと思われます)と 書く慣習があった関係で,
public static void main(String[] argv)と書く人は多くいます.
一方,Java言語を設計したSun Microsystemsの提供するサンプルコードの多くは,
public static void main(String args[])のように,args(ARGumentSの略?)という変数名を使っているため,argsを使う人も多くいます( 「String args[]」と「String[] args」はどちらでも同じ意味になります).
田中の講義資料では,なるべくargsの方を使うようにしているのですが,つい つい手がすべって,argvと書いてしまっているところがありました(さきほど調 べたら9箇所見つかりました).混乱の元なので,変更することにします.
int i,v=3; for(i=0;i<9;i++); if((i % v) ==0) System.out.println(i + "は" + v + "の倍数です。"); else System.out.println(i + "は" + v + "の倍数ではない。");と書いて実行したら 9は3の倍数です。 しか表示されませんでした。どうして0〜8が計算されなかったのでしょうか。教えて下さい。
for(i=0;i<9;i++);の行で,行末にセミコロン「;」がついていますね.これを入れると, for文の説明 ( http://lecture.ecc.u-tokyo.ac.jp/~ktanaka/programming05/primers/1-6.html )で
for(式1;式2;式3) 文と書かれていた文の部分が空文(なにもしない文)と見なされてしまいます.そこで,このfor文ではiを0から8まで 増やしながら繰り返しは実行するものの,繰り返しの実行の中身は空で,iが9になってfor文を抜けてから 次のif文を実行したというわけです.
このように,1文字セミコロン「;」を入れ間違うだけで,プログラムの意味が違ってしまうことがあるので, プログラムを作成する時には注意が必要です.
// 実行結果は (1) になります class Collatz{ public static void main(String[] args){ // (2)の部分は自分の学生証番号の下4桁を入れなさい。 // 頭の0はつけないでください。 int n= 17; int count=0; while(n!=1){ System.out.println(n); if((n%2)==0){ // nを2で割る n%2 ; } else{ // nを3倍して1を足す n*3+1 ; } // 変数countを1増やす count=count+1 ; } System.out.println("count="+count); } }というプログラムだったとすると,コンパイル時に
Collatz.java:6: \65297 は不正な文字です。 int n= 17; ^ Collatz.java:6: \65303 は不正な文字です。 int n= 17; ^ Collatz.java:12: \65285 は不正な文字です。 n%2 ; ^ Collatz.java:12: 文ではありません。 n%2 ; ^ Collatz.java:12: \65298 は不正な文字です。 n%2 ; ^ Collatz.java:16: 文ではありません。 n*3+1 ; ^ エラー 6 個というエラーが出ますが,報告されたエラーとは微妙に違うようですね.「文字 ではありません」と書いたのは「文ではありません.」のつもりだったのでしょ うか? 大きな違いですが.
なお,(3), (4)は誤りですが,直接答えるのは問題なので,ヒントで答えます.
/ (発音はスラッシュ(slash)) 除算 算数では「÷」という記号を使うが多くのプログラミング言語「/」の記号を使う. % 剰余算 余りを求める.とありますが,2で割るのは剰余算ではなくて除算です.
count+1;ではなくて,
count=count+1;と書くことは分かっていると思いますが,「nを2で割る」操作も厳密に書くと, 「nを2で割って結果をnに代入する」となることは分かると思います.だとすると, n/2; ではなくてどう書けば良いのかわかるでしょう. (4)も同様です.