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)も同様です.