#author("2019-10-10T02:41:11+00:00","ocha","ocha") [[Lecture]] *Java プログラミング入門 [#s6899a39] このページは、学部2年生向け授業である、「マルチメディアプログラミング実習」 のために用意しました。 (Wikiの仕様で大文字小文字が混在した英単語に疑問符?が追加されるところがありますが、無視してください。) **第3章 [#xc22f04b] ***Javaにおける基本データ型 [#n3c4e251] -整数型 --byte (1バイト) --short (2バイト) --int (4バイト) --long (8バイト。明確に数値で指定する場合は、x = 20L; のように表記。) --char (1文字を表す。メモリー上のサイズは色々。''でくくる。x = 'A'など。) -浮動小数点型 --float (4バイトで表す浮動小数点。重力加速度なら9.80665のように表記。) --double (8バイトで表す高精度な浮動小数点。光速なら2.99792458e+8dのように表記。) -論理型 --boolean (trueかfalseのどちらかの値をとる。 x = true; など。) C言語と違い、整数型のサイズが明確に決められました。char型は、C言語では1バイトでしたが、Javaでは1文字を表します。なので、コードによって1バイトだったり、多バイトだったりします。C言語では論理型がないので、charやintで代用していました。0とか1を代入してました。Javaでは専用のboolean型が用意されました。 -演習1 先に作ったHello.javaを参考にVartest.javaというプログラムを作りましょう。 以下では、byte型変数を定義して、それを表示しています。 変数名は変えても良いです。 printlnの中では、文字列を連結しています。Javaでは文字列を+で連結できます。 class Vartest { public static void main (String args[]) { int x = 42; System.out.println("byte value x =" + x); } } これをもとに、short, int, long, char, float, double booleanの変数を全て追加して表示をしてください。intとcharを追加するなら、以下のようにします。変数名と代入する値は好きなものを使ってください。char型は漢字も試してください。ただしchar型は、1文字だけです。 class Vartest { public static void main (String args[]) { byte x= 42; int x1= 123456; char name = '椎'; System.out.println("byte value x =" + x); System.out.println("int value x1 =" + x1); System.out.println("char value name =" + name); } } -演習2 以下のように、整数型の変数に文字を代入して値を表示すると、文字コードが表示できる。 あなたのイニシャルを表す英文字の文字コードを表示するプログラムを作成しなさい。また、あなたの氏名の最初の文字(漢字やひらがな)についても調べなさい。 int myInitialCode1 = 'S', myInitialCode2 = '椎'; System.out.println(myInitialCode1); System.out.println(myInitialCode2); ***配列 [#g1288d65] C言語では小規模な配列を使う場合、静的に確保した配列をよく使っていたと思います。 Javaではシステムからメモリー確保して動的に確保します。 C言語でもmalloc()関数でメモリーを確保したことがあると思います。 同じやり方です。 システムにお願いして、必要な量の配列を格納するメモリー領域を確保してもらいます。そのコマンドがnewです。 -演習4 --コマンドの引数はarg[0], arg[1] ... などにString型の配列としてプログラムに引き渡されます。 --二つの引数を与えたときに、それが+でつないで表示されるプログラムを作りましょう。 http://gyazo.com/8159f78165e17781a7110de3763c833c.png ヒント --以下は引数一つを表示するだけのサンプルです。これをもとに考えてください。 --arg[0]とarg[1]をprintlnの中で+でつないで表示すれば良いです。 class ArgsTest { public static void main (String args[]) { System.out.println(args[0]); } } 解答 --後で公開します // class ArgsTest { // public static void main (String args[]) { // System.out.println(args[0] + " + " + args[1]); // } // } **第4章 [#p4a8e735] //--演習4.2をやってみよう **第5章 [#p54c6568] ***演習 [#leda55b3] -演習問題5.4(変更) 乱数を10個表示する public class Score { public static void main (String argv[]) { int i,a; for(i=0;i<10;i++) { a=(int)(Math.random() * 100); System.out.println(a); } } } 次にこの乱数を点数とみなして、演習問題5.4の基準に従ってABCDを表示するプログラムを書け。 動作例を以下に示す。 http://gyazo.com/829b04a7fc82cdfe9dd0dfa650af873e.png 解答例: public class Score { public static void main (String argv[]) { int i,a; for(i=0;i<10;i++) { a=(int)(Math.random() * 100); System.out.print(a + " "); if(a<40) System.out.println("D"); else if(a<60) System.out.println("C"); else if(a<80) System.out.println("B"); else System.out.println("A"); } } } -演習問題5.5をやってみよう http://gyazo.com/1733defca0c709c41c69ea729320ab61.png 解答例: class Kinri { public static void main (String args[]) { double okane=100000; int year; year=1; while(okane < 200000) { okane = okane * 1.05; System.out.println("year = " + year + " okane= " + okane); year++; } } } 現在の普通預金の金利0.04%だと倍になるのに何年かかるだろうか。確かめてみよう。 http://gyazo.com/95cd94db39b407e7961355b20da8fc67.png -演習5.6をやってみよう while文をfor文に変えてみる 解答例: class Kinri { public static void main (String args[]) { double okane=100000; int year; for(year=1;okane < 200000; year++) { okane = okane * 1.05; System.out.println("year = " + year + " okane= " + okane); } } } ***モンテカルロ法で円周率を計算してみる(ループの練習) [#s7c57350] --1x1の正方形のエリアにランダムに矢を当てた場合、1/4円の中に当たる矢の数は、 面積に比例すると考えられます。あたりの矢の割合を調べれば円周率がわかります。 http://gyazo.com/e4f68c7ed1045c10801ec201ed00b5e6.png -- MonteCarlo.java というファイルを作ります。 --まずは100個乱数を表示するプログラムを作ってみましょう。 class MonteCarlo { public static void main (String args[]) { int i; for(i=0;i<100;i++) System.out.println(Math.random()); } } 矢の落下点x,yをランダムな位置にするには、乱数で指定します。 これがあたりかどうかは、原点からの距離で調べます x = Math.random(); y = Math.random(); if(x*x + y*y < 1) hit++; --100個の矢、1000個の矢などいろいろためしてで円周率を計算してみてください -- 解答例です class MonteCarlo { public static void main (String args[]) { int i; double hit = 0; double x, y; for(i=0;i<1000;i++) { x = Math.random(); y = Math.random(); if(x*x + y*y < 1) { hit++; } } System.out.println(4 * hit / 1000); } } ***for-each文は新しい手法なので練習しましょう [#s17e2f54] -プログラム5.7の代わりに以下をやってみよう class ArrayTest { public static void main (String args[]) { int[] vec = new int[3]; vec[0]=1; vec[1]=2; vec[2]=3; for (int x: vec) { System.out.println(x); } } } *** 演習 [#vc946bd9] mainの引数argsは、Stringの配列で、コマンドラインで起動したとき、 コマンドの後に続けた書いた文字が入っています。 args[0], args[1], args[2] .... をすべてfor-each文で 表示するプログラムを書いてみましょう。 http://gyazo.com/8d8effac163e0dc939e74f237d8507b1.png ヒント:for(String s: args)を使います -解答例 class ArgsTest2 { public static void main (String args[]) { for(String s: args) System.out.println(s); } } //--args[]の文字をすべてfor-each文で表示する // javac ArgsTest2 cat dog cow fox // catdogcowfox //ヒント //--args[]の文字をすべてfor-each文で+つけて表示する // // javac ArgsTest2 cat dog cow fox // cat + dog + cow + fox //arg[0]とarg[1]をつないで表示する //演習5.5 10万円が20万円になる年 //arg[]の文字をすべてfor-each文で表示する //--演習4.2をarg[0]に対してやってみよう