- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-11-30T08:23:24+00:00","ocha","ocha")
#contents
#author("2021-03-02T12:03:32+00:00","ocha","ocha")
//#contents
*マルチメディアプログラミング実習 2017年度後期 [#s6662b38]
**欠席状況 [#o4d380f5]
3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。
欠席3回以下なら不可にはなりませんが、成績が下がるかもしれませんので、心当たり無ければ連絡ください。
*大学院博士前期課程授業2020年度後期 [#o618d6d1]
|学籍番号|10/5|10/12|10/19|10/26|11/2|11/9|11/16|11/23|11/30|欠席回数合計|
|1520531|0|0|0|0|1|0|0|0|0|1|
|1620501|0|0|0|0|0|0|0|0|0|0|
|1620502|0|0|0|0|0|0|1|0|0|1|
|1620503|0|0|0|0|0|0|0|0|0|0|
|1620504|0|0|0|0|0|0|0|0|0|0|
|1620505|0|0|0|0|0|0|0|0|0|0|
|1620506|0|0|0|0|0|0|0|0|1|1|
|1620507|0|0|0|0|0|0|0|0|0|0|
|1620508|0|0|0|1|0|0|0|0|0|1|
|1620509|0|0|0|0|0|0|0|0|0|0|
|1620510|0|0|0|0|0|0|0|0|0|0|
|1620512|0|0|0|0|0|0|0|0|0|0|
|1620513|0|0|0|0|0|0|0|0|0|0|
|1620515|0|0|0|0|0|0|0|0|0|0|
|1620516|0|0|0|0|0|0|0|1|0|1|
|1620517|0|0|0|0|0|0|0|0|0|0|
|1620518|0|0|0|0|0|0|0|0|0|0|
|1620519|0|0|0|0|0|0|0|0|0|0|
|1620520|0|0|0|0|0|0|0|0|0|0|
|1620521|0|0|0|0|0|0|1|0|1|2|
|1620522|0|0|0|0|0|0|0|0|0|0|
|1620523|0|0|0|0|0|0|0|0|0|0|
|1620524|0|0|0|0|0|0|0|0|0|0|
|1620525|0|0|0|0|0|0|0|0|0|0|
|1620526|0|0|0|0|0|0|0|0|0|0|
|1620527|0|0|0|0|0|0|0|0|0|0|
|1620528|0|0|0|0|0|0|0|0|0|0|
|1620529|1|0|0|0|0|0|0|0|1|2|
|1620530|0|0|1|1|1|0|0|0|0|3|
|1620532|0|0|0|0|0|0|0|0|0|0|
|1620533|0|0|0|0|0|0|0|0|0|0|
|1620534|0|0|0|0|1|0|0|0|0|1|
|1620535|0|0|0|0|0|0|0|0|0|0|
|1620536|0|0|0|0|0|0|0|0|0|0|
|1620537|0|0|0|0|0|0|0|0|0|0|
|1620538|1|0|0|0|0|0|0|0|0|1|
|1620539|0|0|0|0|0|0|0|0|0|0|
|1620540|0|0|0|0|0|0|0|1|0|1|
|1620541|0|0|0|0|0|0|0|0|0|0|
|1620542|0|0|0|0|0|0|0|0|0|0|
- ヒューマンインタフェース(理学専攻)
- ヒューマン・コンピュータ・インタラクション(HCI) (生活工学共同専攻)
の授業です。毎週火曜日で開始時間は2:50pmです。
**授業予定 [#m902f1d1]
今学期はZoomの遠隔授業として実施します。ZoomのアドレスはMoodleを見ていただくか、椎尾までお問い合わせください。
- 10月5日 授業
- 10月12日 授業
- 10月19日 授業
- 10月26日 授業
- 11月2日 授業
- 11月9日 授業
- 11月18日 授業
- 11月23日 授業(祝日だけど通常授業日)
- 11月30日 授業
- 12月7日 休講(学会出張)
- 12月14日 授業
- 12月21日 休講(椎尾通院)
- 1月4日 自習
- 1月11日 休講(月曜授業日)
- 1月18日 授業
- 1月25日 授業
** 講義開催予定 [#xe5bc23d]
今のところの予定です。休講などはまた連絡します。
*11月30日の宿題 [#g174dc04]
-10/6 ガイダンス
-10/13 使いやすい道具・使いにくい道具
-10/20 使いやすい道具・使いにくい道具
-10/27 グラフィカルユーザインタフェース(休講)
-11/3 (文化の日)
-11/10
-11/17
-11/24
-12/1
-12/8
-12/15
-12/22
-1/12
12月14日の授業の時間に提出してください。
**講義資料 [#dde386ec]
***宿題1:プログラム12.4 [#sb6fece9]
このプログラムに関する教科書の説明も読んでおいてください。
- http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c3.ppt.pdf
- http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c6.ppt.pdf
- http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c9.ppt.pdf
- http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c10.ppt.pdf
***宿題2:プログラム13.1のようにボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作ってください。 [#f4fb000e]
まずは、プログラム12.4を見て、上記のプログラムを拡張して5個のボタンに対応して, WEST, EAST, SOUTH, NORTH, CENTERと表示されるプログラムをつくってください。さらにこれを拡張して、プログラム13.1のようなボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作ってください。次回の授業で提出お願いします。
なお、以下のようにすると、ボタンの名前を印刷することができます。
public void actionPerformed(ActionEvent e){
System.out.println(((JButton)e.getSource()).getText());
}
**出席点 [#kc664278]
***宿題3:プログラム13.3 [#d1f33bf7]
出席重視の授業ですので70%以上出席お願いします. 今期はzoomへの接続状況から出席、遅刻、欠席を集計します。授業回数が11回ですので,欠席が3回を超えた場合は単位が出ません.zoomへの接続が不調だった場合は考慮しますので連絡ください。また、研究上必要な用事(学会・研究会への参加・発表など)ありましたらそれも公欠としますので連絡ください。
このプログラムに関する教科書の説明も読んでおいてください。
***宿題4:プログラム13.4 [#v34c2e1a]
*マルチメディアプログラミング実習2020年度後期 [#q77c37e1]
このプログラムに関する教科書の説明も読んでおいてください。
今学期はZoomの遠隔授業として実施します。詳細はMoodleを見てください。
https://moodle.cc.ocha.ac.jp/course/view.php?id=24421
*ヒューマンインタフェース2020年度前期 [#o618d6d1]
**ヒューマンインタフェースのレポート [#fa42ea61]
*11月30日 [#s0daa284]
提出は任意です.もし良いレポートを提出いただけたら出席点の加算に使用します.
-締め切り2020年8月31日月曜日
-形式分量:A4, ページ数は1-2ページ程度
-提出先・提出方法:PDFにしてsiio@is.ocha.ac.jpまでメール添付で送付
-メール表題:ヒューマンインタフェースレポート: 18205XX
http://gyazo.com/4c3086ae9b6b5434d2ea741369f731c5.png
メールの標題は「ヒューマンインタフェースレポート: 18205XX」としてください。数字部分は出席番号です。
提出いただいた方はこのページでお知らせします。提出してしばらく経つのに、 自分の番号がなかなか表示されない場合は,受付されていないかもしれません.もう一度催促してください
(提出を確認出来るよう締め切りより早めに提出していただくことをお勧めします)。
提出状況は、この下に、学籍番号と受理日で案内します。
もし、学籍番号が公表されたくない場合は、確認用の秘密の仮名を提出メールの中でお知らせください。
学籍番号の代わりにその名前を使います。
このプログラムでは,ボタンを押しても何もおこりません.
|学籍番号|受理日|
| 1820533 |2020年8月12日|
| 1820527 |2020年8月15日|
| 1620530 |2020年8月19日|
| 1820503 |2020年8月20日|
| 1820518 |2020年8月20日|
| 1820529 |2020年8月31日|
| 弧月 |2020年8月31日|
//| 1720535 |2020年8月31日|
//| 1720543 |2020年8月31日|
//| sunny |2019年8月31日|
ボタンが押されたイベントを受け取るためには,
+ActionListenerをimplementしたクラスを作る
+そのインスタンスを作る
+これをボタンにaddActionListener()で登録する
必要があります.
プログラム12.3を参考に,ボタンを押したらprintlnで次のようなメッセージを表示するプログラムを作ってみましょう.
***レポートの課題 [#c9d0add0]
http://gyazo.com/67d27d0588f4dd5d11410e1107165994.png
-身の回りの携帯機器、家電製品、機械製品、コンピュータソフトウェア、 道具、日用品、調度品、設備などから、 使いにくいと思われる道具を見つけ出して説明してください。
-そして、それがなぜ使いにくいのかを、 授業で説明した、 制約、マッピング、Affordance、モデル、 エラー対策、 標準化、直接操作、メタファー、モードなどの用語を使って分析してください。 (全部の用語を使う必要は無い)
-また,自分ならこのように設計して使いやすくするというアイディアを、 これも授業で使った用語を交えて、述べてください。
ヒント(最初の6行です)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements ActionListener {
JButton button1, button2;
public void initialize () {
**出席状況 [#te5cda59]
学部「ヒューマンインタフェース」は出席重視の授業です.そのため70%以上出席お願いします. 今期はミニテストの提出状況とzoomへの接続状況から出席、遅刻、欠席を集計します。授業回数が13回程度ですので,欠席が3回を超えた場合は単位が出ません. 以下に授業全体の欠席状況を示す予定です。
//しておきます.
欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください.
//公欠届のある日は出席としてあります。
これも、学籍番号が公表されたくない場合は、確認用の秘密の仮名をメールでお知らせください。
学籍番号の代わりにその名前を使います。
|学籍番号|5月7日|5月14日|5月21日|5月28日|6月4日|6月11日|6月18日|6月25日|7月2日|7月9日|7月16日|7月23日|欠席回数|
//|1620415|出|出|欠|出|出|欠|欠|欠|出|出|出|出|出|4不可|
//|1620501|出|出|出|出|出|出|出|出|出|出|出|出|出|0|
解答例
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements ActionListener {
JButton button1, button2;
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
button1 = new JButton("button1");
button2 = new JButton("button2");
button1.addActionListener(this);
button2.addActionListener(this);
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed (ActionEvent e) {
if(e.getSource()==button1)
System.out.println("Hello");
else
System.out.println("Goodbye");
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
** 講義開催予定 [#p8ec1788]
-5/7 ガイダンス
-5/14 GUIの歴史
-5/21 人の知覚特性
-5/28 人の認知特性
-6/4
-6/11
-6/18
-6/25
-7/2
-7/9
-7/16
-7/23 (海の日)
-7/30
**第13章 様々なコンポーネントとレイアウト [#nfdf4f5e]
***プログラム13.1の説明図 [#ec2d7584]
http://gyazo.com/649bbe400f96c8c31923bcf7e5aebbd4.png
***13.2節を読んで,プログラム13.2を実行させてください [#s05a9149]
//**宿題 [#pb8621ca]
ボタンが一つしかないプログラムなので、ActionPerformedの中で、
ボタン種類のチェックを省略してしまっているところが特徴です。
//下のリンク先のソースコードをコンパイルして、応答速度を図るプロログラムを作ってください。これを使って、みなさんの応答速度を図って、次回(2019年5月16日)の小テスト用紙(A5サイズ)で報告してください。
//http://is.ocha.ac.jp/~siio/index.php?CSL11HCI#k497ebbd
***演習13.1をやってください [#xc59c932]
//**宿題 [#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サイズの用紙に各自で記入して提出してもらいます
こんなのをつくってください。
http://gyazo.com/999f1e766551a994186cc3d159bde0bf.png
//**宿題
//
//***人の反応速度を測定するプログラムを作って測定してください。(2014.4.24) † [#jbad7411]
//-連休明けの授業(5/15)の開始時に、A4, 1枚(両面印刷でも可)で提出してください。
//--用紙の上辺に学籍番号、学年、氏名を1行で書いておいてください。
//-C 言語では,次のようなプログラムで、”hit now”という文字を表示した後、リターンキーが押されるまでの時間を測定できます。
//--http://is.ocha.ac.jp/~siio/hci/hitnow.c
//--このプログラムは固定時間(5秒)後にhit nowが表示されます。乱数を使って表示までの時間を変える改良をしてもらっても良いです。(改良したらそのこともレポートしてください)
//-これによりあなたの応答速度を複数回実測して、人の応答速度が 300ms 程度であることを確認してください。
//-また個人差や年齢などで結果は変わるかもしれません。周りの複数の人に被験者になってもらって調査しても面白いかもしれません。
//-また何度も測定することで、習熟して速度が向上したり、それでも限界があったり、さらには、逆に疲労により速度が低下することがあるかもしれません。
//--そのような現象が観察できたら、これも報告してください。(教科書8章の学習曲線を参考にしてください)
**教科書 [#ta8dbb5f]
http://ec2.images-amazon.com/images/I/51SsP4P1UiL._SL500_AA300_.jpg
BorderLayoutでもできるようですが、私はGridLayour使ってみました。
http://www.amazon.co.jp/dp/4781912605/
panel.setLayout(new GridLayout(2,2));
panel.add(textleft);
panel.add(textright);
panel.add(button);
panel.add(clearbutton);
**授業資料 [#s6bf1fc3]
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c1.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c2.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c3.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c4.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c5.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c6.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c7.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c8.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c9.ppt.pdf
+http://is.ocha.ac.jp/~siio/lecture/humaninterface/HCI_c10.ppt.pdf
(授業開始直前や直後に差し替えされている可能性があります。)
ボタンが複数になるので、ActionPerformedの中で、ボタンを区別する必要があります。
**教科書サポートページ [#b385f64d]
-http://is.ocha.ac.jp/~siio/index.php?CSL11HCI
解答例
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class JTextFieldSample extends JFrame implements ActionListener {
JButton button, clearButton;
JTextField textleft, textright;
JTextFieldSample(String title) {
setTitle(title);
button = new JButton("left to right");
clearButton = new JButton("clear");
button.addActionListener(this);
clearButton.addActionListener(this);
textleft = new JTextField(10);
textright = new JTextField(10);
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(2,2));
panel.add(textleft);
panel.add(textright);
panel.add(button);
panel.add(clearButton);
Container container=this.getContentPane();
container.add(panel);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==(button)) {
textright.setText(textleft.getText());
textleft.setText("");
}else if(e.getSource()==(clearButton)) {
textright.setText("");
}
}
public static void main(String[] args) {
JTextFieldSample sample = new JTextFieldSample("JTextFieldSample");
sample.pack();
sample.setVisible(true);
sample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
***どのボタンからのイベントであるかを識別する方法 [#i076dba0]
-プログラム12.3では
--ボタンへの参照を、action Performedから参照できる変数に入れて
--action Performedの中で、e.get Source()してButtonのインスタンスを得て比較している
-プログラム12.4では、
--準備として button.set Action(button.get Text());でボタン文字をactionとして設定して
-- action Performedの中で e.get Action Command()でアクションを得て文字比較している
-ということで以下のようなことも可能です。
--acttion Performedの中で、get Source()してボタンを得る
--そのボタンからget Textしてボタンの文字列を得て文字比較する
--ただし、get Sourceで得られるのはボタンの親クラスなのでButtonにキャストする
--以下をaction Performedのなかで試してみよう
System.out.println(((JButton)e.getSource()).getText());
***13.5節を読んで,プログラム13.5を実行してください [#o616a647]
http://gyazo.com/dd4e103c011682b3a78b9ed0c8d5134b.png
http://gyazo.com/4755cce7280963b32050db455d265cc1.png
メニューアイテムにcommandという情報をつけて、ActionPerformedではこれを使ってメニュー項目を区別していま
***演習13.2をやってください(メニュー項目は何でも良いです) [#p9d1d369]
***本日のレポート [#o4524903]
プログラム13.5もしくは、演習ができた人は、演習13.2のJMenuSample.javaとJMenuSample.classを、
出席番号+名前のフォルダにいれて、ZIP圧縮して提出してください。
////////////////////////----------------
*11月23日 [#se6432ac]
***http://www.ocha.ac.jp/の内容を表示するプログラムを書いてみよう [#kf0c5bf6]
http://gyazo.com/13044fdd9d372118a1f6fe93896eadb3.png
ヒント1
import java.net.*;
が必要です。
URL targetURL = new URL("http://www.ocha.ac.jp/");
でURLクラスのインスタンスが得られる。
InputStream istream = targetURL.openStream();
でこれからInputStreamのインスタンスが得られる。
InputStreamReader isreader = new InputStreamReader(istream);
でこれからInputStreamReaderのインスタンスが得られる。
BufferedReader breader = new BufferedReader( isreader );
でこれからBufferedReader のインスタンスが得られる。
ヒント2
import java.io.*;
import java.net.*;
public class URLTest {
public static void main (String argv[]) {
try {
ここにプログラムを書く
} catch (IOException e) {
System.out.println("error...");
}
}
}
ヒント3:
import java.io.*;
import java.net.*;
public class URLTest {
public static void main (String argv[]) {
try {
URL targetURL = new URL("http://www.ocha.ac.jp/");
InputStream istream = targetURL.openStream();
InputStreamReader isreader = new InputStreamReader(istream);
BufferedReader breader = new BufferedReader( isreader );
ここで一行ずつ読み込む
} catch (IOException e) {
System.out.println("error...");
}
}
}
解答例:
import java.io.*;
import java.net.*;
public class URLTest {
public static void main (String argv[]) {
try {
URL targetURL = new URL("http://www.ocha.ac.jp/");
InputStream istream = targetURL.openStream();
InputStreamReader isreader = new InputStreamReader(istream);
BufferedReader breader = new BufferedReader( isreader );
String line;
while((line=breader.readLine()) != null) System.out.println(line);
} catch (IOException e) {
System.out.println("error...");
}
}
}
***写真ファイルのダウンロード [#edb3e256]
http://siio.jp/cat.jpg
をダウンロードして、cat.jpgというファイルを作るプログラムを作ってください。
データはテキストじゃなくて、バイナリーです。
ヒント1:
InputStreamのインスタンスに対してread()メソッドを使うと1バイトのデータが得られます。読み終わると-1になります。
1バイトのデータを書き出すなら、FileOutputStreamだけで可能です。
ヒント2:
import java.io.*;
import java.net.*;
public class URLJpeg {
public static void main (String argv[]) {
try {
URL targetURL = new URL("http://siio.jp/cat.jpg");
InputStream istream = targetURL.openStream();
FileOutputStream fout = new FileOutputStream("cat.jpg");
というインスタンスを作って、
istream.read()
で読んで、
fout.write(1バイト)
で書き出します。
解答例
import java.io.*;
import java.net.*;
//http://siio.jp/cat.jpg
//をダウンロードして、cat.jpgというファイルを作るプログラム
public class URLJpeg {
public static void main (String argv[]) {
try {
URL targetURL = new URL("http://siio.jp/cat.jpg");
InputStream istream = targetURL.openStream();
FileOutputStream fout = new FileOutputStream("cat.jpg");
int aData;
while((aData = istream.read()) != -1) fout.write(aData);
istream.close();
fout.close();
} catch (IOException e) {
System.out.println("error...");
}
}
}
***本日のレポート [#o4524903]
上記のプログラム(URLJpeg.java, URLJpeg.class) を、出席番号+名前のフォルダにいれて、ZIP圧縮して提出してください。
***写真読み込みの高速化 [#ia7ce1f8]
上記の例では写真データを1バイトずつ読み書きしていました。
InputStreamのメソッドを調べると、複数バイト単位で読み込むメソッドがあります。
たとえば、512バイトずつ読み書きすることで、処理速度が向上すると期待できます。
そこで、複数バイト読み書きするよう、上記のプログラムを変更して、
実際にどの程度(実行速度にして何倍くらい)性能向上するか確認してみましょう。
read
public int read(byte[] b)
throws IOException
入力ストリームから配列長さだけのバイト数を読み込もうとし、それをバッファ配列 b に格納します。
実際に読み込まれたバイト数は整数として返されます。
戻り値は、バッファに読み込まれたバイトの合計数。ストリームの終わりに達してデータがない場合は -1
を使って読みこみ、
write
public void write(byte[] b,
int off,
int len)
throws IOException
指定された byte 配列の、オフセット位置 off から始まる len バイトを出力ストリームに書き込みます。
を使ってください。
-ヒント
byte[] data = new byte[512];
という配列を用意して、
int datalength;
while(( datalength=istream.read(data)) != -1) fout.write(data, 0, datalength);
とします。
**第12章 Swing [#w5863135]
***とても簡単なウィンドウ [#r57b34f9]
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);
}
}
*** JFrameを継承するプログラミング [#y09a72d9]
import javax.swing.JFrame;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
this.setSize(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
***ラベルを表示するウィンドウ [#xedfffec]
プログラム12.1を参考にして、上記の、継承を使ったプログラムによるウィンドウの中に、
Hello!という文字を出してみよう。
http://gyazo.com/c6efe47de19436f7564660377fe8b98c.png
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleWindow extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JLabel label = new JLabel("Hello!");
Container container = this.getContentPane();
container.add(label);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleWindow sw = new SimpleWindow();
sw.initialize();
}
}
***ボタンを2個表示するウィンドウ [#cb6cf696]
プログラム12.2をみてください。
getContentPane()で得られたContainerに直接ボタンを貼付けることもできますが、
貼付けられるのは一つのボタンだけのようです。
そこで、JPanel (パネル) に2個のボタンを貼付け、それをContainerに貼付けることで複数のボタンを表示しています。
http://gyazo.com/03c28df2419065241b8736b7b69d7fd3.png
プログラム12.2を参考にして、継承を使ったプログラムによるウィンドウの中に、
2個のボタンを出してみよう。
http://gyazo.com/4c3086ae9b6b5434d2ea741369f731c5.png
***本日2番目のレポート [#y0331e79]
上記のプログラム(SimpleWindow.java, SimpleWindow.class) を、出席番号+名前のフォルダにいれて、ZIP圧縮して提出してください。
解答例:
import javax.swing.*;
import java.awt.*;
public class SimpleButton extends JFrame {
public void initialize () {
this.setTitle("私が作った最初の窓");
JPanel panel = new JPanel();
JButton button1 = new JButton("button1");
JButton button2 = new JButton("button2");
panel.add(button1);
panel.add(button2);
Container container = this.getContentPane();
container.add(panel);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String argv[]) {
SimpleButton sw = new SimpleButton();
sw.initialize();
}
}
*11月16日 [#id92f2b1]
***Hash Mapの練習 [#jf7eb616]
プログラム10.4を参考にして、
以下のように動作する英語ー日本語単語変換プログラムを作れ。
[e100:?/Documents/java] siio% java EtoJ banana
バナナ
[e100:?/Documents/java] siio% java EtoJ apple
りんご
[e100:?/Documents/java] siio% java EtoJ
Please input an English word
ヒント:
ヒント:
import java.util.*;
public class EtoJ{
public static void main(String args[]) {
HashMap<String,String> map = new HashMap<String,String>();
try {
}
catch(Exception e) {
}
}
}
解答例:
import java.util.*;
public class EtoJ{
public static void main(String args[]) {
HashMap<String,String> map = new HashMap<String,String>();
map.put("apple","りんご");
map.put("banana","バナナ");
map.put("orange","みかん");
map.put("pineapple","パイナップル");
map.put("grape","ぶどう");
map.put("peach","もも");
map.put("melon","メロン");
map.put("lemon","レモン");
try {
System.out.println(map.get(args[0]));
}
catch(Exception e) {
System.out.println("Please input an English word");
}
}
}
**第11章 入出力 [#hb3a05b8]
***整数を出力する例 [#j899e2e7]
import java.io.*;
public class DoutTest {
public static void main (String[] args) {
try {
FileOutputStream fout = new FileOutputStream("dout.dat");
DataOutputStream dout = new DataOutputStream(fout);
dout.writeInt(100);
dout.close();
}catch (Exception e) {
System.out.println(e);
}
}
}
これでdout.datという名前のファイルができあがるはずです。 作ったファイルを
od -h dout.dat
または
hexdump dout.dat
してみてください
e100:java siio$ hexdump dout.dat
0000000 00 00 00 64
0000004
***整数を入出力する例 [#j899e2e7]
import java.io.*;
public class DoutTest {
public static void main (String[] args) {
try {
FileOutputStream fout = new FileOutputStream("dout.dat");
DataOutputStream dout = new DataOutputStream(fout);
dout.writeInt(100);
dout.close();
FileInputStream finput = new FileInputStream("dout.dat");
DataInputStream dinput = new DataInputStream(finput);
System.out.println(dinput.readInt());
dinput.close();
}catch (Exception e) {
System.out.println(e);
}
}
}
***宿題:演習11.1 をやってください [#z72d00c6]
作ったファイルを
od -h dout.dat
または
hexdump dout.dat
してみてください
解答例
import java.io.*;
public class En111 {
public static void main (String[] args) {
int i;
try {
FileOutputStream fout = new FileOutputStream ("dout.dat");
DataOutputStream dout = new DataOutputStream(fout);
for(i=1;i<101;i++) dout.writeInt(i);
dout.close();
FileInputStream fin = new FileInputStream ("dout.dat");
DataInputStream din = new DataInputStream(fin);
for(i=1;i<101;i++) System.out.println(din.readInt());
din.close();
} catch (FileNotFoundException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
}
}
}
***プログラム11.3をやってみてください [#h15edee7]
作ったファイルを
od -h
または
hexdump
してみてください
http://gyazo.com/74c061dfe2fcd6b72885878f867c78ba.png
import java.io.*;
public class PrintWriterTest{
public static void main(String[] args) {
try {
//writer.txtというファイルを作って文字を書き込む
FileWriter fwriter = new FileWriter("writer.txt");
PrintWriter pwriter = new PrintWriter(fwriter);
pwriter.println(2006);
pwriter.println("Java教科書");
//fwriter.write("Java教科書");
pwriter.close();
}
catch (IOException e) {
System.out.println(e);
}
}
}
つぎに、プログラム11.4を参考にして、
このPrint Write Testに書き足して、
書き込んだデータを読み出して画面に表示するプログラムを作ってください。
ヒント:
import java.io.*;
public class PrintWriterTest{
public static void main(String[] args) {
try {
//writer.txtというファイルを作って文字を書き込む
FileWriter fwriter = new FileWriter("writer.txt");
PrintWriter pwriter = new PrintWriter(fwriter);
pwriter.println(2006);
pwriter.println("Java教科書");
//fwriter.write("Java教科書");
pwriter.close();
ここに書き足す
}
catch (IOException e) {
System.out.println(e);
}
}
}
***文字ストリームをファイルに書いて読み込むプログラム [#bed8144f]
import java.io.*;
public class PrintWriterTest{
public static void main(String[] args) {
try {
//writer.txtというファイルを作って文字を書き込む
FileWriter fwriter = new FileWriter("writer.txt");
PrintWriter pwriter = new PrintWriter(fwriter);
pwriter.println("java 教科書" + 2001 );
pwriter.close();
//writer.txtのファイルの中身をSystem.out.printlnで表示する
FileReader freader = new FileReader("writer.txt");
BufferedReader breader = new BufferedReader(freader);
String tmp;
while( (tmp=breader.readLine() ) != null) {
System.out.println(tmp);
}
breader.close();
}
catch (IOException e) {
System.out.println(e);
}
}
}
***プログラム11.5をやってこれを拡張して演習11.2をやってください [#ya1ca508]
キーボードから1行入力された文字列によるテキストファイルを作る
http://gyazo.com/f9aee7f492d574f870e85e2022df374c.png
ヒント
import java.io.*;
public class En112 {
public static void main(String[] args) {
try {
ここにプログラムを書く
}
catch(IOException e) {
System.out.println(e);
}
}
}
これができたら、そのファイルを読み込んで表示する機能をさらに追加してください。
(FileReader, BufferedReaderを作ってrealLine()する)
import java.io.*;
public class En112 {
public static void main(String[] args) {
try{
InputStreamReader ireader = new InputStreamReader(System.in);
BufferedReader breader = new BufferedReader(ireader);
String line = breader.readLine();
System.out.println(line);
breader.close();
FileWriter fwriter = new FileWriter("writer.txt");
PrintWriter pwriter = new PrintWriter(fwriter);
pwriter.println(line);
pwriter.close();
FileReader freader = new FileReader("writer.txt");
BufferedReader breader2 = new BufferedReader(freader);
System.out.println(breader2.readLine());
breader2.close();
}catch(IOException e){
System.out.println(e);
}
}
}
**本日のレポート [#y5146699]
En112.javaとclassを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
///////////////////////////////////////////////////////////
*11月9日 [#c541167e]
**第9章 エラーと例外処理 [#gd4f8eae]
次のプログラムを作って試してください。
引数が少ないとエラーが出るのを確認してください。
public class TestException {
public static void main(String argv[]){
System.out.println(argv[0]+" "+argv[1]);
System.out.println("Nice to meet you.");
}
}
エラーが出る可能性のある場所をtryでくくっておき、
エラーが出たらそれを細くする処置をcatchで指定します。
public class TestException {
public static void main(String argv[]){
try{
System.out.println(argv[0]+" "+argv[1]);
System.out.println("Nice to meet you.");
}
catch (Exception e) {
System.out.println("please input 2 words.");
}
}
}
このソースは、
public class TestString {
public static void main (String argv[]) {
try{
System.out.println(argv[0]);
int len = argv[0].length();
for(int i = len - 1; i>=0; i--) {
System.out.print(argv[0].charAt(i));
}
System.out.println();
}
catch (Exception e) {
System.out.println("please input a word");
}
}
}
である。
**第10章 Stringクラスとコレクションフレームワーク [#w938c6ce]
***引数の単語を表示するプログラムを作る [#wf6cf0b5]
- 引数がないときは"please input a word"と出すようにする
*** 入力した文字を逆に出力するプログラムを作る [#p6f8c354]
[e100:?/Documents/java] siio% java TestString ochanomizu
ochanomizu
uzimonahco
[e100:?/Documents/java] siio%
ヒント:System.out.println()は改行するが、System.out.print()という関数は改行をしない
***Linked List の練習 [#d2a5cbd0]
プログラム10.2を入力して実行してください。
サンプルプログラムを実行するときは、
LinkedList<String> list = new LinkedList<String>();
などと定義すると良い。
またコンパイルで注意が出るので、
javac -Xlint:unchecked LinkedListTest.java
というオプションをつけてコンパイルしてみてください。
***プログラム10.2 改造 [#j2f946c0]
プログラム10.2の最後では、Iteratorを使って要素を全部表示しています。
これを教科書p.150のtoArray()メソッドでString配列を作ってfor each文で要素を印刷するように
書き換えてください。
ヒント:
Alice --> Bob --> Cindy --> DaveというLinkedListをつくって、
それからtoArray()メソッドでString配列を作ってfor each文で要素を印刷する
import java.util.*;
public class LinkedListTest{
public static void main(String[] argv) {
LinkedList<String> list = new LinkedList<String>();
list.add("Alice");
list.add("Bob");
list.add("Dave");
list.add("Cindy");
Object[] names = list.toArray();
for(Object s: names ) System.out.println(s);
}
}
**本日のレポート [#y5146699]
toArray()メソッドで一覧表示するよう改造したLinkedListTest.javaとlinkedListTest.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
------------
*11月2日 [#yf52838c]
**第8章 継承 [#ka97b6ac]
継承の話をしました。
別のクラスを継承することで、
差分だけを書いて機能を拡張していくことができます。
http://gyazo.com/2c8ef14d8be63b9fc18c58d79f2f3879.png
*** Osaifuクラスを継承してOsaifuUSDクラスを作ってみよう [#fc83e4ee]
-OsaifuUSDクラスはアメリカで買い物をするときに便利な、アメリカドルでお金を出し入れできる財布です。
-あたらしく追加するメソッドは以下です
-- void inUSD(int x) xドルをお財布に入金します。このとき円に換算して残高に追加します
-- int outUSD(int x) xドルをお財布から出金します。このとき円に換算した金額だけ残高が減ります。戻り値はドルにしましょう。
--1ドルは114円にしてください
//-スーパークラスのメソッドを上書きするメソッドは以下です
//-- void print() お財布の残高を円とドルで表示します
-OsaifuUSDクラスをテストするmain()メソッドでは次のことをやってください
-- OsaifuUSDインスタンスを一つ作ってそれをsaifu1という名前にする
-- OsaifuUSDインスタンスをもう一つ作ってそれをsaifu2という名前にする
--saifu1に1000円入金する
--saifu2に5ドル入金する
--saifu1とsaifu2が持っている金額を印刷する
--saifu1から2ドル出金してそれをsaifu2に入金する
--saifu1とsaifu2が持っている金額を印刷する
-動作例
http://gyazo.com/f51ea5895aaab32bb30b9a940d91515d.png
-ヒント:一行目はこれ
public class OsaifuUSD extends Osaifu {
-ヒント:mainはこんな感じ
public static void main(String argv[]) {
OsaifuUSD saifu1= new OsaifuUSD();
OsaifuUSD saifu2=new OsaifuUSD();
saifu1.in(1000);
saifu2.inUSD(5);
saifu1.print();
saifu2.print();
saifu2.inUSD(saifu1.outUSD(2));
saifu1.print();
saifu2.print();
}
-解答例
public class OsaifuUSD extends Osaifu {
public int outUSD(int usd) {
okane-=usd * 114;
return usd;
}
public void inUSD(int usd) {
okane+=usd * 114;
}
public static void main(String argv[]) {
OsaifuUSD saifu1 = new OsaifuUSD();
OsaifuUSD saifu2 = new OsaifuUSD();
saifu1.in(1000);
saifu2.inUSD(5);
saifu1.print();
saifu2.print();
saifu2.inUSD(saifu1.outUSD(2));
saifu1.print();
saifu2.print();
}
}
*** OsaifuUSDクラスの改造(1) [#g8c0b7a2]
親のメソッドを活用しても良い
public class OsaifuUSD extends Osaifu {
public int outUSD(int usd) {
return ( out( usd * 90) / 90 );
}
public void inUSD(int usd) {
in( usd * 90 );
}
…
}
親のメソッドを呼ぶことを明示的に書くためにsuper.をつかってもよい。
public class OsaifuUSD extends Osaifu {
public int outUSD(int usd) {
return ( super.out( usd * 90) / 90 );
}
public void inUSD(int usd) {
super.in( usd * 90 );
}
…
}
*** OsaifuUSDクラスの改造(2) [#sa44f577]
OsaifuUSDにprint()メソッドを追加して、
円表示の次の行に ( xxx USD ) と残高をUSD表示するようにしてください。
円表示を行う部分はスーパークラスOsaifuのインスタンスメソッドprint()を利用することを考えてみてください。
http://gyazo.com/39a7b24a8c45e15ac55693592c2eb7cf.png
-解答例
public void print() {
super.print();
System.out.println("( " + (okane / 114) + " usd )" );
}
***継承でウィンドウを作る [#m14bd7eb]
授業の最初に、こんなウィンドウを作るプログラムを紹介しました。
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);
}
}
#ref(How2Java/simplewindow.png)
これはSimpleWindowというクラスの中で、JFrameのインスタンスを作って表示しました。
これを、JFrameを継承したクラスを作り、
そのクラスの中で自分のインスタンスを作り表示することも可能です。
import javax.swing.JFrame;
public class SimpleWindow extends JFrame {
public static void main(String args[]) {
SimpleWindow w = new SimpleWindow();
w.setSize(200,100);
w.setVisible(true);
}
}
Javaでは以下のように継承してウィンドウを作り、
その機能を拡張して、アプリケーションを作るのが一般的です。
import javax.swing.JFrame;
public class SimpleWindow extends JFrame {
void init() {
this.setTitle("私が作った最初の窓"); //this.じゃなくてsuper.でもok
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(200,100);
this.setVisible(true);
}
public static void main(String args[]) {
SimpleWindow w = new SimpleWindow();
w.init();
}
}
***小テスト練習 [#g4c60a6e]
以下のプログラムの中で、
クラス、インスタンス、サブクラス、スーパクラス、クラスメソッド、インスタンスメソッドがどれであり、
インスタンス化、継承がどこで行われているのか確認してください。
(importで始まる一行目はまだ説明していない内容なので小テストでは扱いません。無視してください)
import javax.swing.JFrame;
public class SampleWindow extends JFrame {
public static void main(String args[]) {
SampleWindow w = new SampleWindow();
w.setVisible(true);
}
}
**本日のレポート [#w02fe277]
OsaifuUSD.javaとOsaifuUSD.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
*10月26日 [#icc32449]
-Point3Dに、他の点との距離を返すメソッド distance ( Point3D p ) を実装して、次のmain()メソッドで
10, 20, 30
-10, -20, -30
74.83314773547883
という結果が出るようにしましょう
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();
System.out.println(pt1.distance(pt2));
}
--解答例
double distance ( int ptx, int pty, int ptz ) {
int dx = ptx - this.x;
int dy = pty - this.y;
int dz = ptz - this.z;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}
double distance ( Point3D p ) {
return this.distance(p.getx(), p.gety(), p.getz());
}
**第7章 クラスとオブジェクトの操作 [#k1b96e7b]
*** 他の点との距離を返すメソッドの例を説明しました [#xfa5f246]
double distance ( int ptx, int pty ) {
int dx = ptx - this.x;
int dy = pty - this.y;
return Math.sqrt(dx * dx + dy * dy);
}
double distance ( Point p ) {
return this.distance(p.getx(), p.gety());
}
distanceという名前は同じでも、引数の違いで、異なる動作をさせることができます。
*** Osaifuクラスを作ってみよう [#i9df5c2e]
-Osaifuクラスからはインスタンスがたくさん作られる
--Osaifuクラスはお財布の設計図/工場、ここから実際のお財布(インスタンス)が複数作られる
--工場出荷時の残金は0円だけど、その後、いろいろな値になるだろう(お金持ちのお財布には残金が多いだろうし、逆ならば少ないだろう)
--ということで残金はインスタンス変数とすべきだろう
-Osaifuクラスには次のメソッド、変数が必要だろう
--残金を表すインスタンス変数 int okane
--お金を入金するインスタンスメソッド void in(int x);
--お金を出金するインスタンスメソッド int out(int x); 戻り値は実際に出金できた金額(残金が不足ならばあるだけしか出せない)
--残金を印刷するインスタンスメソッドがあってもよいだろう void print(); &br;
http://gyazo.com/bd6eaafd220dc7ff791288089f293b28.png
-Osaifuクラスをテストするmain()メソッドでは次のことをやってください
-- Osaifuインスタンスを一つ作ってそれをsaifu1という名前にする
-- Osaifuインスタンスをもう一つ作ってそれをsaifu2という名前にする
--saifu1に1000円入金する
--saifu2に500円入金する
--saifu1とsaifu2が持っている金額を印刷する
--saifu1から200円出金してそれをsaifu2に入金する
--saifu1とsaifu2が持っている金額を印刷する
public static void main(String argv[]) {
Osaifu saifu1 = new Osaifu();
Osaifu saifu2 = new Osaifu();
saifu1.in(1000);
saifu2.in(500);
saifu1.print();
saifu2.print();
saifu2.in(saifu1.out(200));
saifu1.print();
saifu2.print();
}
http://gyazo.com/c618901458edc1ba338cab87d2810157.png
-Osaifu.java 解答編
public class Osaifu {
int okane;
public void in (int x) { okane += x; }
public int out(int x) { okane -= x; return x; }
public void print() {
System.out.println( "okane = " + okane +" yen");
}
public static void main(String argv[]) {
Osaifu saifu1 = new Osaifu();
Osaifu saifu2 = new Osaifu();
saifu1.in(1000);
saifu2.in(500);
saifu1.print();
saifu2.print();
saifu2.in(saifu1.out(200));
saifu1.print();
saifu2.print();
}
}
--このプログラムでは残金がマイナスになってしまってもかまわない設計になってしまっています。実際には残金だけの金額しか出せないはずなので、outメソッドを改良して、残金以上の金額を要求されたら、残金分だけしか出さないように変更してみてください。
--このためには、例えばoutメソッドを以下のようにすれば良い
public int out(int x) {
if(x < okane ) {
okane = okane -x;
return x;
} else {
int nokori = okane;
okane =0;
return nokori;
}
}
*** つぎにOsaifuクラスにコンストラクタを追加してみよう [#a8a56d7e]
-Osaifu() で残金0のインスタンスを作る
-Osaifu(int x) で引数を残金の初期値としたインスタンスを作る
ことができるコンストラクタを作ろう。
これをmainから呼んで、上記のプログラムと同じことをするためには、
Osaifu saifu1 = new Osaifu(1000);//インスタンスを作る
//最初の保持金額を1000円にする
Osaifu saifu2 = new Osaifu(500);//インスタンスを作る
//最初の保持金額を500円にする
とすることになる。
***コンストラクタ解答編 [#w62499a7]
以下のコンストラクタを作ることになる。
Osaifu() { okane = 0; }
Osaifu(int x) { okane = x; }
これは以下のように書いても良い。
Osaifu() { this(0); }
Osaifu(int x) { okane = x; }
**本日のレポート [#taf5ddf5]
Osaifu.javaとOsaifu.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
*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にドラッグアンドドロップして
登録しておくと良いかと思います。
//- メニューのターミナル/環境設定...を開きます。
//ここで、テキストを選んで、「テキストをアンチエイリアス処理」に
//チェック入れておくとフォントが奇麗なのでおすすめです。
//**宿題:ボタンを押すたびに点灯/消灯を繰り返す(トグルする)プログラム (2015/7/17提出) [#a9dc7742]
//
//http://siio.jp/gyazo/8aa6f5ab8878bc57c0657b94f5ae7a58.png
//以下は、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
// }
//- おなじウィンドウの「詳細」に、「文字エンコーディング」というのがあります。
//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になっていれば日本語も正しく出るはずです。
//**宿題:人の反応速度を測定するプログラムを作って測定してください。(2015.5.1) [#f5834458]
//-連休明けの授業(5/8)の開始時に、A5, 1枚に書いて提出していただきます。
//-C 言語では,次のようなプログラムで、”hit now”という文字を表示した後、リターンキーが押されるまでの時間を測定でき//ます。
//--http://is.ocha.ac.jp/~siio/hci/hitnow.c
//--このプログラムは固定時間(5秒)後にhit nowが表示されます。
//-- 乱数を使って表示までの時間を変える改良をしてもらっても良いです。(改良したらそのこともレポートしてください)
//-これによりあなたの応答速度を実測して、人の応答速度が 300ms 程度であることを確認してください。(複数回実測して平均とってもらえるとさらに正確ですね)
//
//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まで。