#author("2019-10-10T06:55:25+00:00","ocha","ocha") //#contents *マルチメディアプログラミング実習 2019年度後期 [#d33b7775] **2019年10月10日:Javaの基礎、変数 [#p4b79b04] ***今日の提出課題 [#lf439861] cat + dogを表示する課題のjavaとclassを前回と同様にフォルダにコピーして、圧縮して提出してください。 ***文字列 [#t32f75c4] C言語では文字列はただのバイト変数の配列でした。最後の値が0であることで、長さを知ることができる程度です(番兵方式)。 Javaでは文字列は、Stringクラスのインスタンスです。 なんのことかは後の授業で説明しますが、処理をする関数を内包している「構造体Structure」のようなものです。 なので、いろいろな操作が可能です。 文字列は""で括ります。 "Hello Java World!" printlnできます。 System.out.println("Hello Java World!"); 足し算もできます。 System.out.println("This is " + "a test."); 変数にも代入できます。変数の種類はStringです。オブジェクト指向の用語で説明すると、Stringクラスのインスタンスとしてworldを定義したということです。クラスは設計図、雛形、金型のようなもので、インスタンスはそれから作成された実体のようなものです。 String world = "Hello Java World!"; -演習6 最初に作ったHello.javaプログラムを、String変数 worldという変数に代入してから表示するプログラムに書き換えてみましょう。 解答例: class Hello { public static void main (String args[]) { String world = "hello java world!"; System.out.println(world); } } -演習7 --コマンドの引数は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]); } } できてしまった人は以下をお願いします。 このプログラムで、引数が2個未満の場合はエラーになります。 2個未満の場合には、2個引数を描いてくださいというメッセージを出すよう変更しましょう。 .length関数でargsの長さを知ることができます。 if文はC言語と同じです。 if(args.length < 2) { } else { } というように書けます。 -------------- ***配列 [#e846fded] C言語では小規模な配列を使う場合、静的に確保した配列をよく使っていたと思います。 Javaでは、システムからメモリー確保して動的に確保した配列を使うのが一般的です。 C言語でもmalloc()関数でメモリーを確保したことがあると思います。 例えばint型の変数3個分のメモリを確保して、それをint型を示すポインターに入れて、配列として使いました。 //C言語での例です: int *p; *p = (int *)malloc(sizeof(int)*3); Javaでも同じことをやります。 システムにお願いして、必要な量の配列を格納するメモリー領域を確保してもらいます。そのコマンドがnewです。 まずは配列の変数を定義して、次にnewコマンドで必要なメモリー領域を確保して、それが返すメモリーアドレス(に相当する値)を配列の変数に入れます。メモリーアドレスに相当する数値は、C言語ではポインターと言いましたが、Javaでは参照と言います。 int[] x; (配列を参照する変数を定義する) x = new int[3]; (int3個ぶんのメモリー領域をnewコマンドで取得して参照をxに代入する) こうすると、プログラムの中からx[0]=1;とかx[2]=x[0];などと操作してこの配列を利用できます。 1行でまとめて書くこともあります。 int[] x = new int[3]; 演習3 要素が100個のintの配列x[0]からx[99]を作って、それに1,2,3,4....,100という数字を入れて、さらにそれらをprintlnで表示するプログラムを作りましょう。先ほどのVartest.javaを改造して作ってください。for文で値を入れて、for文で表示してください。for文の使い方はC言語と同一です。 ヒント: class Vartest { public static void main (String args[]) { //配列を定義します。 //(略) //for文で値を入れます for(int i=0; i<100; i++) { //(略) } //for文で表示します for(int i=0; i<100; i++) { //(略) } } --------------------- **第3章「変数」 [#xc22f04b] ***Javaにおける基本データ型 [#n3c4e251] -整数型 --byte (1バイト。-128から127) --short (2バイト。-32,768から32767) --int (4バイト。-2,147,483,648から2,147,483,647) --long (8バイト。明確に数値で指定する場合は、x = 20L; のように表記。-9,223,372,036,854,775,808から9,223,372,036,854,775,807) --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); } } 解答例: class Vartest { public static void main (String args[]) { byte x_byte = 42; int x_int = 12345; short x_short = 123; long x_long = 12345678; char x_char = '椎'; float x_float = 123.4f; double x_double = 3.14d; boolean x_boolean = true; System.out.println("byte value x_byte = " + x_byte); System.out.println("short value x_short = " + x_short); System.out.println("int value x_int = " + x_int); System.out.println("long value x_long = " + x_long); System.out.println("char value x_char = " + x_char); System.out.println("float value x_float = " + x_float); System.out.println("double value x_double = " + x_double); System.out.println("boolean value x_boolean = " + x_boolean); } } -演習2 以下のように、整数型の変数に文字を代入して値を表示すると、文字コードが表示できる。 あなたのイニシャルを表す英文字の文字コードを表示するプログラムを作成しなさい。また、あなたの氏名の最初の文字(漢字やひらがな)についても調べなさい。 int myInitialCode1 = 'S', myInitialCode2 = '椎'; System.out.println(myInitialCode1); System.out.println(myInitialCode2); ------------------ - 次に簡単なウィンドウを出してみましょう。 授業の最後の方で紹介する,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) *** 超簡単なプログラム(hello world)を作ってみる [#v4ccc293] - ターミナルから、vi Hello.javaとかemacs Hello.javaとかpico Hello.javaとかタイプしたり、 もしくは、cotEditerを起動して作成します。 - ここで、以下のようなプログラムを書いてみます。 class Hello { public static void main (String args[]) { System.out.println("hello java world!"); } } http://siio.jp/gyazo/20121004010107.png - これをHello.javaという名前で保存します。lsやcatコマンドで確認しましょう。cat Heくらいをタイプして、あとはタブキーを使って補完機能を利用してください。 $ ls Hello.java $ cat Hello.java class Hello { public static void main (String args[]) { System.out.println("hello java world!"); } } 今は、Hello.javaファイルが一つしかありません。これをコンパイルします。 $ javac Hello.java (コンパイルする) コンパイルに成功するとHello.classというファイルができているはずです。lsコマンドで確認します。 $ ls Hello.class Hello.java これはjavaコマンドで動作します。javaはインタープリータです。 $ java Hello (実行する。.javaなどの拡張子は不要) hello java world! (結果) ---------- ***今後の予定 [#de7840d4] -10月24日 椎尾学会出張のため休講 -1月16日 月曜授業日のため授業なし -1月23日 最終授業日 **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/6/api/ http://docs.oracle.com/javase/jp/8/docs/api/index.html ***参考図書(去年までは教科書でした) [#d5f8ad25] http://gyazo.com/de3288074dae1c75f6df4ef3c0b9b3d4.png http://www.amazon.co.jp/dp/4883732258/ 前半はこの内容で進めますので、手元にあると便利です。 *** この講義の目的 [#l5592b29] +Javaでプログラムする +オブジェクト指向の概念を理解してプログラミングする +GUIプログラミングをする *** この講義の順序 [#gcf48d66] +Javaになれる(C言語などのプログラミング手法の復習) +オブジェクト指向について理解する +GUIプログラミングについて理解する(イベント駆動) +お絵描きプログラムを作ってみる *** 成績評価 [#c732dbb9] +お絵描きプログラムの完成度,作り込み +毎回の宿題の達成(参考程度) +出席状況(参考程度) ***単位を出す条件 [#k4e326f7] //**欠席状況 + 最終課題のお絵描きプログラムで最低限お願いした機能を実装してください。 + 3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。 (公欠、忌引などは欠席にしませんので連絡ください。病欠、電車遅延の遅刻は確認できるものを提出してください。) //欠席3回以下なら不可にはなりませんが、成績が下がるかもしれません。 //以下に欠席状況を示します。 //ので、心当たり無ければ連絡ください。 //(病欠、公欠、忌引などは0になっているはずですが間違っていたら連絡ください。) ***授業用のフォルダを作る [#l5df9663] 授業の内容を入れておくフォルダを作ってください。Documentsの中にjavaというようなフォルダを作ると良いです。 ***出席表明アプリケーション [#s026a135] 以下のアプリケーションで、授業開始に出席表明してもらいます。皆さんがクリックし終わったら、締め切ります。それまでにクリックできない人は遅刻とします。 - http://siio.jp/IamAttending.zip #ref(http://siio.jp/gyazo/b1128c100d39263a8480428af2d05da0.png,200x200) - ダウンロードしてzipを開くと、フォルダになっているかもしれません。その中にあるIamAttendingというアプリを使います。 - 初めて起動する時は、右クリックして、「開く」ボタンを選んでください。 - 今後の授業でも最初に使いますのでわかりやすいところに置いてください。 //|学籍番号|10/4|10/11|10/25|11/8|11/15|11/22|11/29|12/6|12/13|12/20|1/10|合計| //|1720501|0|0|0|0|0|0|0|0|0|0|0|0| ** 出来上がったプログラムの提出方法 [#bd9cbbf8] - フォルダを作ってその中にjavaファイルとclassファイル //と、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれら を入れてください。 フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。 -このフォルダに名前を付けてください。フォルダの名前は、「出席番号+氏名(ローマ字の姓名)+必要ならばバージョン番号の数字」にしてください。たとえば17020999siioitiro01のように。なお全部半角英数字でお願いします。 -このフォルダを圧縮してください --フォルダを選択してファイルメニューから圧縮を選択します -圧縮したファイルを以下の手順で /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]]一覧をみることができます。 -同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名最後に数字をつけてください) *ヒューマンインタフェース2019年度前期 [#o618d6d1] **ヒューマンインタフェースのレポート [#fa42ea61] 提出は任意です.もし良いレポートを提出いただけたら出席点の加算に使用します. -締め切り2019年8月31日土曜日 -形式分量:A4, ページ数は1-2ページ程度 -提出先・提出方法:PDFにしてsiio@is.ocha.ac.jpまでメール添付で送付 -メール表題:ヒューマンインタフェースレポート: 17205XX メールの標題は「ヒューマンインタフェースレポート: 17205XX」としてください。数字部分は出席番号です。 提出いただいた方はこのページでお知らせします。提出してしばらく経つのに、 自分の番号がなかなか表示されない場合は,受付されていないかもしれません.もう一度催促してください (提出を確認出来るよう締め切りより早めに提出していただくことをお勧めします)。 //提出状況は、この下に、学籍番号と受理日で案内します。 //もし、学籍番号が公表されたくない場合は、確認用の秘密の仮名を提出メールの中でお知らせください。 //学籍番号の代わりにその名前を使います。 //|学籍番号|受理日| //| 1720505 |2019年8月30日| //| 1720514 |2019年8月31日| //| 1720525 |2019年8月26日| //| 1720529 |2019年8月24日| //| 1720535 |2019年8月31日| //| 1720543 |2019年8月31日| //| sunny |2019年8月31日| //sunny = 1720534 //|1620515|2018年8月| //|1620520|2018年8月| ***レポートの課題 [#c9d0add0] -身の回りの携帯機器、家電製品、機械製品、コンピュータソフトウェア、 道具、日用品、調度品、設備などから、 使いにくいと思われる道具を見つけ出して説明してください。 -そして、それがなぜ使いにくいのかを、 授業で説明した、 制約、マッピング、Affordance、モデル、 エラー対策、 標準化、直接操作、メタファー、モードなどの用語を使って分析してください。 (全部の用語を使う必要は無い) -また,自分ならこのように設計して使いやすくするというアイディアを、 これも授業で使った用語を交えて、述べてください。 **出席状況 [#te5cda59] 学部「ヒューマンインタフェース」は出席重視の授業です.そのため70%以上出席お願いします. 授業回数が13回ですので,欠席が3回を超えた場合は単位が出ません. 以下に授業全体の欠席状況を示す予定です。 //しておきます. 欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください. //公欠届のある日は出席としてあります。 //|学籍番号|4月12日|4月19日|5月17日|5月24日|5月31日|6月7日|6月14日|6月21日|6月28日|7月5日|7月12日|7月19日|7月26日|欠席回数| //|1620415|出|出|欠|出|出|欠|欠|欠|出|出|出|出|出|4不可| //|1620501|出|出|出|出|出|出|出|出|出|出|出|出|出|0| ** 講義開催予定 [#p8ec1788] -4/11 -4/18 -4/25 -4/27 休講(出張) -5/9 休講(学会出張) -5/16 -5/23 -5/30 -6/6 -6/13 -6/20 -6/27 -7/4 -7/11 休講 -7/18 -7/25 -8/1 試験週間のため授業はありません **宿題 [#pb8621ca] 下のリンク先のソースコードをコンパイルして、応答速度を図るプロログラムを作ってください。これを使って、みなさんの応答速度を図って、次回(2019年5月16日)の小テスト用紙(A5サイズ)で報告してください。 http://lab.siio.jp/index.php?CSL11HCI#k497ebbd //**宿題 [#x69779a5] // //***GUI黎明期のPC性能を調べてください(2018.4.19) [#ba9db6ff] //-GUI黎明期PCのCPU名、CPUクロック、メモリ容量、画素数を調べてください //--現在,Windows を使っている人は,最初の Windows が出荷された 1985 年当時に使われていたIBM PC/AT //--Mac OS Xを使っている人は,1984に出荷された最初の Macintosh //-今あなたが使っているコンピュータと比較してください. //-次回の授業(5/17)最初に配布するA5サイズの用紙に各自で記入して提出してもらいます //**宿題 // //***人の反応速度を測定するプログラムを作って測定してください。(2014.4.24) † [#jbad7411] //-連休明けの授業(5/15)の開始時に、A4, 1枚(両面印刷でも可)で提出してください。 //--用紙の上辺に学籍番号、学年、氏名を1行で書いておいてください。 //-C 言語では,次のようなプログラムで、”hit now”という文字を表示した後、リターンキーが押されるまでの時間を測定できます。 //--http://siio.jp/hci/hitnow.c //--このプログラムは固定時間(5秒)後にhit nowが表示されます。乱数を使って表示までの時間を変える改良をしてもらっても良いです。(改良したらそのこともレポートしてください) //-これによりあなたの応答速度を複数回実測して、人の応答速度が 300ms 程度であることを確認してください。 //-また個人差や年齢などで結果は変わるかもしれません。周りの複数の人に被験者になってもらって調査しても面白いかもしれません。 //-また何度も測定することで、習熟して速度が向上したり、それでも限界があったり、さらには、逆に疲労により速度が低下することがあるかもしれません。 //--そのような現象が観察できたら、これも報告してください。(教科書8章の学習曲線を参考にしてください) **教科書 [#ta8dbb5f] http://ec2.images-amazon.com/images/I/51SsP4P1UiL._SL500_AA300_.jpg http://www.amazon.co.jp/dp/4781912605/ **授業資料 [#s6bf1fc3] +http://siio.jp/lecture/humaninterface/HCI_c1.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c2.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c3.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c4.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c5.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c6.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c7.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c8.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c9.ppt.pdf +http://siio.jp/lecture/humaninterface/HCI_c10.ppt.pdf (授業開始直前や直後に差し替えされている可能性があります。) **教科書サポートページ [#b385f64d] -http://lab.siio.jp/index.php?CSL11HCI //**宿題:ボタンを押すたびに点灯/消灯を繰り返す(トグルする)プログラム (2015/7/17提出) [#a9dc7742] // //以下は、Arduinoの2ピンに接続された押しボタンスイッチを押すとLEDが点灯するプログラムです。これを改造して、押し//ボタンスイッチを押すたびに、点灯/消灯を切り替えるプログラムを作ってください。 //ちなみにHIGHとLOWはintの値で、int型の変数で保存することができます。 // // int outpin=13; //An LED is connected to ping 13 // int inpin=2; //A switch is connected to pin 2 // // void setup() { // // initialize the digital pin as an output and input. // pinMode(outpin, OUTPUT); // pinMode(inpin, INPUT); // } // // void loop() { // if ( digitalRead(inpin) == HIGH) { // digitalWrite(outpin, LOW); // set the LED on // } // else { // digitalWrite(outpin, HIGH); // set the LED off // } // delay(30); // wait for 30 msecond // } //**宿題:人の反応速度を測定するプログラムを作って測定してください。(2015.5.1) [#f5834458] //-連休明けの授業(5/8)の開始時に、A5, 1枚に書いて提出していただきます。 //-C 言語では,次のようなプログラムで、”hit now”という文字を表示した後、リターンキーが押されるまでの時間を測定でき//ます。 //--http://siio.jp/hci/hitnow.c //--このプログラムは固定時間(5秒)後にhit nowが表示されます。 //-- 乱数を使って表示までの時間を変える改良をしてもらっても良いです。(改良したらそのこともレポートしてください) //-これによりあなたの応答速度を実測して、人の応答速度が 300ms 程度であることを確認してください。(複数回実測して平均とってもらえるとさらに正確ですね) // // ------ このページについてのお問い合わせはsiio@is.ocha.ac.jpまで。