#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]に対してやってみよう


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS