#author("2017-10-19T07:01:49+00:00","ocha","ocha") #contents *マルチメディアプログラミング実習 2017年度後期 [#s6662b38] //**欠席状況 [#l124acfe] //3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。 //欠席3回以下なら不可にはなりませんが、成績が下がるかもしれませんので、心当たり無ければ連絡ください。 *10月19日 [#p32c04e4] **第5章(つづき) [#j26db0b3] ***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); } } ----- -演習問題5.5をwhile文を使ってやってみよう http://gyazo.com/1733defca0c709c41c69ea729320ab61.png -演習5.6をやってみよう while文をfor文に変えてみる -現在の普通預金の金利0.001%だと倍になるのに何年かかるだろうか。確かめてみよう。 できた人から2:30pmまで休憩してください。 **第6章 クラスの基礎 [#bd0963ec] ***クラスとインスタンスの説明をしました [#gc6def4c] -クラスは型、インスタンスはそれから作られたもの --クラスがたいやきの焼き型だとすると、インスタンスはそれから作られたたいやき --クラスは設計図でインスタンスはそれから作られたもの -クラスとインスタンスそれぞれにメソッドと変数がある --クラス変数 例:何個のインスタンスを作ったか? --クラスメソッド 例:インスタンスを作れ --インスタンス変数 例:ひとつのたいやきの重さ --インスタンスメソッド 例:たいやきをxxグラム食べる http://gyazo.com/bbdd3587977a172f7fa7f00c4f5787e0.png -演習問題6.1, 6.2, 6.3 例えば以下のような実行結果が出るようにしてください http://gyazo.com/deeb78a70a724a01ce76945235d42ab8.png ***public static void main の説明をしました [#p8e5e198] -javaコマンドは、引数のクラスのクラスメソッドmainを実行します --staticと付いているのがクラス変数、クラスメソッドの印です -Pointクラスにクラスメソッドmainを実装すれば自分自身をテストできます -クラスPoint3Dに自分自身をテストするクラスメソッドmainを作ってみよう http://gyazo.com/bdef2ab8e69f7f6e62273c2d67d7af2e.png ***変数にはメソッド経由でアクセスするのが良いという説明をしました [#c813a888] -変数の型などを将来変更してもメソッドの書き換えで対応できます public class Point { private int x, y; void set(int newx, int newy) {x=newx; y=newy;} int getx() { return x;} int gety() { return y;} void print () { System.out.println(x + ", " + y); } public static void main(String argv[]) { Point pt1= new Point(); Point pt2 = new Point(); pt1.set(10,20); pt2.set(-pt1.getx(), -pt1.gety()); pt1.print(); pt2.print(); } } -Point3Dのメソッドを充実させて次のmain()メソッドで 10, 20, 30 -10, -20, -30 という結果が出るようにしましょう public static void main(String argv[]) { Point3D pt1 = new Point3D(); Point3D pt2 = new Point3D(); pt1.set(10, 20, 30);//インスタンス変数を設定 pt2.set(-pt1.getx(), -pt1.gety(), -pt1.getz()); pt1.print();//インスタンスメソッド呼出 pt2.print(); } **本日のレポート [#taf5ddf5] Point3D.javaとPoint3D.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。 *10月12日 [#r5f257e7] **第3章 [#xc22f04b] -演習 --演習3.4をみて、自分の名前の最初の文字の文字コードを表示してみてください。 --arg[0]とarg[1]をprintlnの中で+でつないで表示する http://gyazo.com/8159f78165e17781a7110de3763c833c.png ヒント 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章 [#f2e95643] --演習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の基準に従ってABCDEを表示するプログラムを書け。 動作例を以下に示す。 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"); } } } **本日のレポート [#taf5ddf5] Score.javaとScore.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。 //----------------------------------------------------------- *10月5日 [#k1f7eb81] **javaのマニュアル [#beafbfad] //http://sdc.sun.co.jp/java/docs/j2se/1.5.0/ja/docs/ja/api/index.html //http://java.sun.com/javase/ja/6/docs/ja/api/index.html //http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html http://docs.oracle.com/javase/jp/8/docs/api/index.html ***教科書 [#a7e1ce26] http://gyazo.com/de3288074dae1c75f6df4ef3c0b9b3d4.png http://www.amazon.co.jp/dp/4883732258/ 買ってください。もしくは、先輩から安く譲ってもらってください。 *** この講義の目的 [#l5592b29] +Javaでプログラムする +オブジェクト指向の概念を理解してプログラミングする +GUIプログラミングをする *** この講義の順序 [#gcf48d66] +Javaになれる(C言語などのプログラミング手法の復習) +オブジェクト指向について理解する +GUIプログラミングについて理解する(イベント駆動) +お絵描きプログラムを作ってみる *** 成績評価 [#c732dbb9] +欠席は3回までです。欠席4回で自動的に不可になります。公欠、病欠は欠席にカウントしません。 +お絵描きプログラムの完成度,作り込み +毎回の宿題の達成(参考程度) +出席状況(欠席回数で減点します) +成績は研究室配属にも考慮します(予定) **第1章および第2章 [#y3ae1beb] *** macOSでJavaを使う [#g3e7de3f] macOSはJavaと相性が良く、最初からjavaがインストールされています。 ということでWindowsより簡単に(というか何もしなくても)javaが使えます。 *** terminalを起動する [#ia8beba9] //#ref(How2Java/terminal.png) http://siio.jp/gyazo/7366bfab668207c6598c4d88ef70d2d4.png - terminalは、/Applications/Utilities/の中にあります。 ちなみに、/Applicationsはファインダでは/アプリケーションと日本語として見えます。 /Applications/Utilities/は、/アプリケーション/ユーティリティ/と日本語として見えています。 - ダブルクリックすると起動します。 よく使うことになると思いますので、dockにドラッグアンドドロップして 登録しておくと良いかと思います。 //- メニューのターミナル/環境設定...を開きます。 //ここで、テキストを選んで、「テキストをアンチエイリアス処理」に //チェック入れておくとフォントが奇麗なのでおすすめです。 // //http://siio.jp/gyazo/8aa6f5ab8878bc57c0657b94f5ae7a58.png //- おなじウィンドウの「詳細」に、「文字エンコーディング」というのがあります。 //Javaの場合、ここで「Unicode (UTF-8)」を選んでおきましょう。 //(日本語コードにはいろいろな種類があって混乱しますが、21世紀に生きるみなさんはUnicodeで統一していきましょう) //http://gyazo.com/1b36039be113ef9e8ed04842aaeb3da6.png - ターミナルから、javacとタイプしてみてください。Javaがすでに入っているので、 オプションの説明が日本語で出てくると思います。 --最近のmacOSでは、Javaが標準で入っていない場合もあります。 その場合は、ダインロードするかどうか聞かれますので、ダウンロードしましょう。 //--ここでの日本語表示が化けていたら、javaがUnicodeじゃなくてShift-JISなどのコードで動いていることになります。タ//ーミナルをShift-JISなどに設定しても良いのですが、ここは、JavaをUnicodeで動かすようにしましょう。 //-JavaをUnicodeで動かす(前項で文字化けした場合の対処) //--javacを起動するときに、javac -J-Dfile.encoding=UTF-8 とオプションを付けます //--javaを起動するときには、java -Dfile.encoding=UTF-8 とオプションを付けます。 //--面倒なので、.bash_profileに登録しておきましょう //-- ~/.bash_profileを開いて以下の行を追加します // alias javac='javac -J-Dfile.encoding=UTF-8' // alias java='java -Dfile.encoding=UTF-8' *** テキストエディタを用意しておく [#qfba9e5b] //http://siio.jp/gyazo/2c0e58d1b83d396e1fbe6f5d247670ff.png - Javaのプログラムを作るエディタです。一番簡単にはterminalからviとかemacsとかpicoとかタイプして エディタを呼び出せば良いです。 - でも日本語の設定などが結構難しいので、GUIベースのエディタを使ってみましょう。 - いくつかありますが、椎尾のおすすめの一つはCotEditorという、便利なフリーウェアのテキストエディタです。 - CotEditorを使うには、https://coteditor.comからダウンロードして~/Applicationsにコピーします。 - これも便利なのでdockに入れておくとよいと思います。 //http://siio.jp/gyazo/7579915fefe1ecd9c0e4e2ddfa55177d.png *** 超簡単なプログラム(hello world)を作ってみる [#v4ccc293] - ターミナルから、vi Hello.javaとかemacs Hello.javaとかpico Hello.javaとかタイプしたり、 もしくは、他のエディタを起動してファイル/新規/javaを選んで新しいファイルを作って開きます。 - ここで、以下のようなプログラムを書いてみます。 class Hello { public static void main (String args[]) { System.out.println("hello java world!"); } } //-このときmiで改行コードをLF (UNIX)にしておいてください。またUTF-8になっていれば日本語も正しく出るはずです。 // //http://siio.jp/gyazo/20121004010107.png - これをHello.javaという名前で保存して、コンパイル実行します。すると以下のようになります。 javac Hello.java (コンパイルする) java Hello (実行する。.javaなどの拡張子は不要) hello java world! (結果) - 次に簡単なウィンドウを出してみましょう。 授業の最後の方で紹介する,Swingというフレームワークを使ってウィンドウを出してみます. import javax.swing.JFrame; public class SimpleWindow { public static void main(String argv[]) { JFrame f = new JFrame("私が作った最初の窓"); f.setSize(200,100); // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } これをSimpleWindow.javaという名前で保存して、 javac SimpleWindow.java java SimpleWindow とタイプしてコンパイル/実行します。 このプログラムは,ウィンドウのクローズボタンを押しても終了しません. プログラムを停止するには,ターミナルでコントロール-cを押します. #ref(How2Java/simplewindow.png) ** 出来上がったプログラムの提出方法 [#bd9cbbf8] - フォルダを作ってその中にjavaファイルとclassファイル //と、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれら を入れてください。 フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。 -このフォルダに名前を付けてください。フォルダの名前は、「出席番号+氏名(ローマ字の姓名)+必要ならばバージョン番号の数字」にしてください。たとえば09020999siioitiro01のように。なお全部半角英数字でお願いします。 -このフォルダを圧縮してください --フォルダを選択してファイルメニューから圧縮を選択します -圧縮したファイルを以下の手順で /home/isstaff/siio/Public/Drop Box/. に提出してください。ターミナル.appからなら cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。 http://siio.jp/gyazo/dropbox.png --書き込み専用なので確認できないけどokですかという意味のダイアログが出るかと思いますが問題ありません。 -レポート提出用フォルダは書き込み専用で見ることができません。アップロードできたかどうか不安でしたら教員まで質問してください。 //-授業中でしたら、[[ココを見ると:http://siio.jp/lecture/java_report.html]]一覧をみることができます。 -同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名最後に数字をつけてください) **レポート提出方法 [#ac87d6ac] /home/isstaff/siio/Public/Drop Box/. に提出してください。ターミナル.appからなら cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。 http://siio.jp/gyazo/dropbox.png ------ このページについてのお問い合わせはsiio@is.ocha.ac.jpまで。