提出いただいたファイル名、ファイルサイズ、提出日時、は以下の通りです。 複数提出いただいた場合は、一番新しい日付のものを残して、古いものは削除しました。 提出したのにここに載っていないとか、提出した最終ファイルと違うという場合は、 大至急連絡ください。 (?マークはシステムの不具合です。無視してください)
| サイズ | 月 | 日 | 時間 | ファイル名 |
| 1835739 | 1 | 28 | 15:08 | 1420501atsukimaya16.zip |
| 1038518 | 1 | 28 | 21:35 | 1420502arakawa.zip |
| 5558 | 1 | 28 | 16:35 | 1420503ikemotohiromi.zip |
| 309719 | 1 | 28 | 11:23 | 1420504ishiimoekolast02.zip |
| 570428 | 1 | 28 | 16:35 | 1420505ChiakiISHIO_SimpleDraw2.zip |
| 6558333 | 1 | 28 | 19:15 | 1420506imaimiki.zip |
| 1110204 | 1 | 28 | 11:27 | 1420507iwami2.zip |
| 2378021 | 1 | 27 | 18:02 | 1420508uedashiori01.zip |
| 1492584 | 1 | 28 | 13:23 | 1420509UrushiharaRino.zip |
| 2825291 | 1 | 27 | 19:20 | 1420510 ooshimaharuna.zip |
| 193209 | 1 | 25 | 15:34 | 1420511otawaranana.zip |
| 507482 | 1 | 28 | 13:18 | 1420512ogasawaramoe14.zip |
| 2335590 | 1 | 28 | 21:37 | 1420513ozakikana01.zip |
| 157050 | 1 | 27 | 21:12 | 1420514osanaiharuka14.zip |
| 1500371 | 1 | 28 | 21:35 | 1420515ozawaayumi16.zip |
| 1478092 | 1 | 28 | 23:22 | 1420516oniiwaakari13.zip |
| 143831 | 1 | 28 | 19:17 | 1420517OmataMariko.zip |
| 3122282 | 1 | 28 | 23:56 | 1420518Kitanoshizuka14.zip |
| 365689 | 1 | 28 | 21:49 | 1420519kuboayuno.zip |
| 818401 | 1 | 27 | 15:16 | 1420520sasa.zip |
| 267739 | 1 | 22 | 18:14 | 1420521satosunao.zip |
| 1642918 | 1 | 28 | 23:53 | 1420522shiinaharuka12.zip |
| 494360 | 1 | 26 | 15:31 | 1420523shinmurayori14.zip |
| 227052 | 1 | 22 | 18:22 | 1420525chibayukiko_lasttask.zip |
| 324304 | 1 | 28 | 15:25 | 1420526choukaei02.zip |
| 12137824 | 1 | 28 | 17:50 | 1420527tsukuisae17.zip |
| 169900 | 1 | 28 | 16:57 | 1420528tsutsuiminamilast1.zip |
| 429414 | 1 | 28 | 16:55 | 1420529tsuruayako15.zip |
| 530825 | 1 | 28 | 23:23 | 1420530teramachisakiko02.zip |
| 166777 | 1 | 28 | 16:31 | 1420531nemotoyuka11.zip |
| 266367 | 1 | 27 | 07:21 | 1420532hiragaikuko12.zip |
| 131816 | 1 | 28 | 22:22 | 1420533furukawa.zip |
| 83194 | 1 | 25 | 17:28 | 1420534murayamayuri14.zip |
| 671578 | 1 | 27 | 15:50 | 1420535yasueshiori.zip |
| 1076125 | 1 | 27 | 20:27 | 1420536yamashitarisa.zip |
| 6699661 | 1 | 28 | 12:59 | 1420537YukiYamada.zip |
| 342841 | 1 | 28 | 22:57 | 1420538yamamotoaoi 2.zip |
| 446222 | 1 | 27 | 12:54 | 1420539wakamiyaarisa_last.zip |
| 135096 | 1 | 25 | 13:22 | 1420540WatanabeHiromi01.zip |
| 143210 | 1 | 28 | 17:05 | 1120525suzukitomoe01.zip |
欠席回数が多くて単位が出ない人は、幸いいらっしゃらないようです(全員3回以下)。 欠席回数は成績に反映しますので、 間違いがあったら至急連絡ください。
| 学籍番号 | 10月8日 | 10月15日 | 10月22日 | 10月29日 | 11月26日 | 12月10日 | 12月17日 | 12月24日 | 1月7日 | 1月14日 | 1月21日 | 欠席回数合計 |
| 1120525 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
| 1420501 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 1420502 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 2 |
| 1420503 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420504 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420505 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420506 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420507 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1420508 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420509 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420510 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420511 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420512 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420513 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420514 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1420515 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420516 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1420517 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420518 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420519 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
| 1420520 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420521 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1420522 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 2 |
| 1420523 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420525 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420526 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420527 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420528 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1420529 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 3 |
| 1420530 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420531 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 3 |
| 1420532 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1420533 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 3 |
| 1420534 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420535 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420536 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420537 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1420538 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 1420539 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1420540 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 月日 | 内容 |
| 10/1 | 第1,2章 |
| 10/8 | |
| 10/15 | |
| 10/22 | |
| 10/29 | |
| 11/5 | TOEFL試験のため休講 |
| 11/12 | 椎尾海外出張のため休講 |
| 11/19 | 椎尾学会出張のため休講 |
| 11/26 | |
| 12/3 | 椎尾学会出張のため休講 |
| 12/10 | |
| 12/17 | |
| 12/24 | |
| 1/7 | |
| 1/14 | |
| 1/21 | |
| 1/28 | 試験期間のため休講 |
/home/isstaff/siio/Public/Drop Box/.に提出してください。ターミナル.appからなら
cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Boxとしてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。
現在完成したところのプロフラムの一式を、 フォルダに入れて、出席番号+ローマ字の名前にして、圧縮して、出欠がわりに提出してください。
現在完成したところのプロフラムの一式を、 フォルダに入れて、出席番号+ローマ字の名前にして、圧縮して、出欠がわりに提出してください。
JPanelのサブクラスを作りました。
import javax.swing.JPanel;
import java.awt.Graphics;
public class DrawPanel extends JPanel {
public void drawLine(int x1, int y1, int x2, int y2){
Graphics g = this.getGraphics();
g.drawLine(x1, y1, x2, y2);
}
}
こちらはメインのプログラム。JFrameのサブクラスで、これに上記のJPanelのサブクラスを貼付けます。 リスナーになっているので、こちらでマウスなどのイベントを受け取ります。
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class SimpleDraw extends JFrame implements MouseMotionListener {
int lastx=0, lasty=0, newx, newy;
DrawPanel panel;
public void mouseMoved(MouseEvent arg0) {
}
public void mouseDragged(MouseEvent arg0) {
newx=arg0.getX();
newy=arg0.getY();
panel.drawLine(lastx,lasty,newx,newy);
lastx=newx;
lasty=newy;
}
private void init() {
this.setTitle("Simple Draw");
this.setSize(300, 200);
this.addMouseMotionListener(this);
panel=new DrawPanel();
this.getContentPane().add(panel);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SimpleDraw frame=new SimpleDraw();
frame.init();
}
}
private static final long serialVersionUID = 42L;
という変数を定義しておきます。
上で紹介したSimple Drawを、一筆書きにならないように変更してみてください。
機能拡張の詳細はSimpleDrawの
を見てください。SimpleDrawのページでは、
の2通りの拡張を書いてあります。どちらの方針で進めていただいても結構です。 説明書に、工夫したところを書いておいてください。
/home/isstaff/siio/Public/Drop Box/.に提出してください。ターミナル.appからなら
cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Boxとしてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class SimpleAnime extends JFrame {
private void init() {
this.setTitle("SimpleAnime");
this.setSize(300,200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SimpleAnime frame = new SimpleAnime();
frame.init();
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class SimpleAnime extends JFrame {
JPanel panel;
Graphics g;
private void init() {
this.setTitle("SimpleAnime");
this.setSize(300,200);
panel = new JPanel();
this.getContentPane().add(panel);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g=panel.getGraphics();
g.setColor(Color.blue);
int x=0, xdelta=10;
while(true) {
g.fillOval(x,80,50,50);
try{Thread.sleep(50);}catch(Exception e){}
g.clearRect(x, 80, 52,52);
x+=xdelta;
if(x>250) xdelta=-10;
if(x<0) xdelta=10;
}
}
public static void main(String[] args) {
SimpleAnime frame = new SimpleAnime();
frame.init();
}
}
上記のプログラムでは、main()で、frame.init()したあと、このメソッドで無限にアニメーション書き換えを行うことになります。なので、二度とmain()には戻ってきません。(以下で示した、メニューは、また別のスレッドで動くので、このままでも動きます)
アニメーションだけをするなら、これでも良いのですが、他にも仕事をしたい場合には難しいですし、やれないことはないですが、タイミングを計るのが難しいです。ということで、アニメーションする部分は、別のスレッドにして、そちらに任せてしまうのが通常です。
以下のように、別のインスタンスを別スレッドで動かします。別スレッドで動かすインスタンスを作るために、Animatorという名前のクラスを用意しました。別スレッドで動かすためには、Runnableをimplementする必要があります。ここで必須のrunというメソッドが、裏で実行されるので、そこに、上記のプログラムのアニメーション描画部分をそっくり移動させます。Graphics gの情報を伝えておく必要があるので、それを設定するメソッドも作りました。アニメーションしつつ、main()の方で数字を表示しています。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Thread;
class Animator implements Runnable {
Graphics g;
public void setGraphics(Graphics animeG) {
g=animeG;
}
public void run() {
int x=0, xdelta=10;
while(true) {
g.fillOval(x,80,50,50);
try{Thread.sleep(50);}catch(Exception e){}
g.clearRect(x, 80, 52,52);
x+=xdelta;
if(x>250) xdelta=-10;
if(x<0) xdelta=10;
}
}
}
class SimpleAnime extends JFrame {
JPanel panel;
Graphics g;
Animator animator;
private void init() {
animator=new Animator();
this.setTitle("SimpleAnime");
this.setSize(300,200);
panel = new JPanel();
this.getContentPane().add(panel);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g=panel.getGraphics();
g.setColor(Color.blue);
animator.setGraphics(g);
new Thread(animator).start();
}
public static void main(String[] args) {
SimpleAnime frame = new SimpleAnime();
frame.init();
for(int i=0;;i++) {
System.out.println(i);
try {Thread.sleep(500);}catch(Exception e){}
}
}
}
ヒント:上のアニメーションのプログラムに、メニューを取り付けて、 action Performedでメニューからのイベントを受け取れば良いです。 メニューの動きは、プログラム本来の動きと並列に動いてくれるので、 上のアニメーションのようなアニメーション以外何もできない手抜きアニメーションでも、 メニューは動いてくれます。
ヒント: action Performed ではこうしたら良い
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command=="red") g.setColor(Color.red);
if(command=="blue") g.setColor(Color.blue);
ヒント:メニューはSimple Animeでつくって、action listenerをanimatorにしました。メニューを作るところがながいので、メソッドに分けました。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Thread;
class Animator implements Runnable, ActionListener {
略
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command !=null) {
System.out.println(command);
}
if(command=="red") g.setColor(Color.red);
if(command=="blue") g.setColor(Color.blue);
if(command=="yellow") g.setColor(Color.yellow);
if(command=="fast") xdelta=30;
if(command=="slow") xdelta=5;
}
略
}
class SimpleAnime extends JFrame {
略
private void makeMenu() {
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("color");
JMenu menuSpeed = new JMenu("speed");
JMenuItem item1 = new JMenuItem("red");
item1.addActionListener(animator);
item1.setActionCommand("red");
JMenuItem item2 = new JMenuItem("blue");
item2.addActionListener(animator);
item2.setActionCommand("blue");
JMenuItem item3 = new JMenuItem("yellow");
item3.addActionListener(animator);
item3.setActionCommand("yellow");
menu.add(item1);
menu.add(item2);
menu.add(item3);
JMenuItem item4 = new JMenuItem("fast");
item4.addActionListener(animator);
item4.setActionCommand("fast");
JMenuItem item5 = new JMenuItem("slow");
item5.addActionListener(animator);
item5.setActionCommand("slow");
menuSpeed.add(item4);
menuSpeed.add(item5);
menubar.add(menu);
menubar.add(menuSpeed);
this.setJMenuBar(menubar);
}
略
}
上記のプログラムにメニューを追加して、 ボールの色と速さをメニューで指定するようにしました。 メニューはメインのJFrameインスタンスで作ってこれに貼りつけていますが、 Action Listenerは、別スレッドで動いているAnimatorクラスのインスタンスとしました。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Thread;
class Animator implements Runnable, ActionListener {
Graphics g;
int xdelta =5;
public void setGraphics(Graphics animeG) {
g=animeG;
}
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command !=null) {
System.out.println(command);
}
if(command=="red") g.setColor(Color.red);
if(command=="blue") g.setColor(Color.blue);
if(command=="yellow") g.setColor(Color.yellow);
if(command=="fast") xdelta=30;
if(command=="slow") xdelta=5;
}
public void run() {
int x=0;
while(true) {
g.fillOval(x,80,50,50);
try{Thread.sleep(50);}catch(Exception e){}
g.clearRect(x, 80, 52,52);
x+=xdelta;
if(x>250) xdelta=-xdelta;
if(x<0) xdelta=-xdelta;
}
}
}
class SimpleAnime extends JFrame {
JPanel panel;
Graphics g;
Animator animator;
private void makeMenu() {
JMenuBar menubar = new JMenuBar();
JMenu menu = new JMenu("color");
JMenu menuSpeed = new JMenu("speed");
JMenuItem item1 = new JMenuItem("red");
item1.addActionListener(animator);
item1.setActionCommand("red");
JMenuItem item2 = new JMenuItem("blue");
item2.addActionListener(animator);
item2.setActionCommand("blue");
JMenuItem item3 = new JMenuItem("yellow");
item3.addActionListener(animator);
item3.setActionCommand("yellow");
menu.add(item1);
menu.add(item2);
menu.add(item3);
JMenuItem item4 = new JMenuItem("fast");
item4.addActionListener(animator);
item4.setActionCommand("fast");
JMenuItem item5 = new JMenuItem("slow");
item5.addActionListener(animator);
item5.setActionCommand("slow");
menuSpeed.add(item4);
menuSpeed.add(item5);
menubar.add(menu);
menubar.add(menuSpeed);
this.setJMenuBar(menubar);
}
private void init() {
animator = new Animator();
this.setTitle("SimpleAnime");
this.setSize(300,200);
this.makeMenu();
panel = new JPanel();
this.getContentPane().add(panel);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
g=panel.getGraphics();
g.setColor(Color.blue);
animator.setGraphics(g);
new Thread(animator).start();
}
public static void main(String[] args) {
SimpleAnime frame = new SimpleAnime();
frame.init();
for(int i=0;;i++) {
System.out.println(i);
try {Thread.sleep(500);}catch(Exception e){}
}
}
}
アニメーションの途中で、ボールがちらつくことがあります。 ボールの場所を矩形で消して、新しいボールを描いているので、 その途中の作業が見えてしまうからです。 これを無くすには、ダブルバッファの手法を用います。 すなわち、描画する面をもう一枚用意して、 そちらに描画し、 描画が終わったところで、一気に更新する方法です。
ダブルバッファの手法は、授業の最終課題である「お絵かきプログラム」のところで説明します。
How2MacOSXProgramming を見てください
How2iPhoneProgramming を見てください
プログラム13.1のようにボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作る宿題をお願いしました。 このプログラムの.java, classファイルをまとめて、出席番号+名前のフォルダに入れて、圧縮して提出してください。
ボタンが一つしかないプログラムなので、ActionPerformedの中で、 ボタン種類のチェックを省略してしまっているところが特徴です。
こんなのをつくってください。
BorderLayoutでもできるようですが、私はGridLayour使ってみました。
panel.setLayout(new GridLayout(2,2)); panel.add(textleft); panel.add(textright); panel.add(button); panel.add(clearbutton);
ボタンが複数になるので、ActionPerformedの中で、ボタンを区別する必要があります。
解答例
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);
}
}
System.out.println((JButton)(e.getSource()).getText());
メニューアイテムにcommandという情報をつけて、ActionPerformedではこれを使ってメニュー項目を区別しています。
教科書203ページのプログラム13.6の5行めのところに、
... implements ActionListener6: {
とありますが、これは、
... implements ActionListener {
の間違いのようです。
マウスイベントを受け取るには、Mouse ListenerやMouse Motion Listenerなどをインプリメントします。 以下のようにするとイベントをうけとれるます。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MouseTest extends JFrame implements MouseListener, MouseMotionListener{
public void mouseClicked(MouseEvent e) {
System.out.println("mouse clicked!");
}
public void mouseEntered(MouseEvent e) {
System.out.println("mouse entered!");
}
public void mouseExited(MouseEvent e) {
System.out.println("mouse exited!");
}
public void mousePressed(MouseEvent e) {
System.out.println("mouse pressed!");
}
public void mouseReleased(MouseEvent e) {
System.out.println("mouse released!");
}
public void mouseDragged(MouseEvent e) {
System.out.println("mouse dragged!");
}
public void mouseMoved(MouseEvent e) {
System.out.println("mouse moved!");
}
public static void main(String[] args) {
MouseTest test = new MouseTest();
test.setTitle("MouseTest");
test.addMouseListener(test);
test.addMouseMotionListener(test);
test.setSize(400,300);
test.setVisible(true);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
http://is.ocha.ac.jp/~gradthesis/lecture/Sounds/Ping.aiff
(他にも、Basso.aiff Frog.aiff Hero.aiff Pop.aiff Submarine.aiff Blow.aiff Funk.aiff Morse.aiff Purr.aiff Tink.aiff Bottle.aiff Glass.aiff Ping.aiff Sosumi.aiff を置いておきました)
これを再生するプログラムを作ってみましょう。以下で再生できます。
import java.io.*;
import javax.sound.sampled.*;
public class AudioPlay {
public static void main(String[] args) {
try{
File audioFile = new File("Ping.aiff");
AudioFormat format = AudioSystem.getAudioFileFormat(audioFile).getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip)AudioSystem.getLine(info);
clip.open(AudioSystem.getAudioInputStream(audioFile));
clip.start();
clip.drain();
clip.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
以下の内容の新しいファイル,buttontest.cを作ってください. printfの逆スラッシュが正しくコピペできてないかもしれないので,注意してください. 入力が面倒なら,添付ファイルの buttontest.c をダウンロードしてください.
#include <X11/Xlib.h>
#include <stdio.h>
int main (){
Display *display = XOpenDisplay (NULL);
XEvent event;
Window window = XCreateSimpleWindow(display, DefaultRootWindow(display),0,0,150,100,0,0,0);
XSelectInput(display,window,KeyPressMask | ButtonPressMask | ButtonReleaseMask);
XMapWindow(display, window);
XFlush(display);
while(1) {
XNextEvent(display,&event);
switch (event.type) {
case KeyPress:
printf("key\n");
break;
case ButtonPress:
printf("button down\n");
printf("button\n");
break;
case ButtonRelease:
printf("button up\n");
break;
}
}
return 0;
}
以下のコマンドでコンパイルしてください.
cc -L/usr/X11R6/lib -I/usr/X11R6/include buttontest.c -lX11
出来上がったファイルを,./a.outで実行してください.
引数のURLをファイルにするプログラムと、 また、cat.jpgのファイル取得でまとめて読むことでどれくらい速度が改善したかのレポートを、 提出してください。
これらのjava, class, レポートのファイルをまとめて、出席番号+名前のフォルダに入れて、圧縮して提出してください。
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);
}
}
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();
}
}
プログラム12.1を参考にして、上記の、継承を使ったプログラムによるウィンドウの中に、 Hello!という文字を出してみよう。
解答例:
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();
}
}
プログラム12.2をみてください。 getContentPane()で得られたContainerに直接ボタンを貼付けることもできますが、 貼付けられるのは一つのボタンだけのようです。 パネルに2個のボタンを貼付け、それをContainerに貼付けることで複数のボタンを表示しています。
プログラム12.2を参考にして、継承を使ったプログラムによるウィンドウの中に、 2個のボタンを出してみよう。
解答例:
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();
}
}
このプログラムでは,ボタンを押しても何もおこりません.
ボタンが押されたイベントを受け取るためには,
プログラム12.3を参考に,ボタンを押したらprintlnで次のようなメッセージを表示するプログラムを作ってみましょう.
ヒント(最初の6行です)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleButton extends JFrame implements ActionListener {
JButton button1, button2;
public void initialize () {
解答例
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();
}
}
まずは、プログラム12.4を見て、上記のプログラムを拡張して5個のボタンに対応して, WEST, EAST, SOUTH, NORTH, CENTERと表示されるプログラムをつくってください。さらにこれを拡張して、プログラム13.1のようなボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作ってください。次回の授業で提出お願いします。
なお、以下のようにすると、ボタンの名前を印刷することができます。
public void actionPerformed(ActionEvent e){
System.out.println(((JButton)e.getSource()).getText());
}
System.out.println((JButton)(e.getSource()).getText());
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
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);
}
}
}
作ったファイルを
od -h
または
hexdump
してみてください
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);
}
}
}
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);
}
}
}
キーボードから1行入力された文字列によるテキストファイルを作る
ヒント
import java.io.*;
public class En112 {
public static void main(String[] args) {
try {
ここにプログラムを書く
}
catch(IOException e) {
System.out.println(e);
}
}
}
解答例
import java.io.*;
public class En112 {
public static void main(String[] args) {
try {
InputStreamReader ireader = new InputStreamReader (System.in);
BufferedReader breaderK = new BufferedReader(ireader);
String line = breaderK.readLine();
FileWriter fwriter = new FileWriter("writer.txt");
PrintWriter pwriter = new PrintWriter(fwriter);
pwriter.println(line);
pwriter.close();
FileReader freader = new FileReader("writer.txt");
BufferedReader breaderF = new BufferedReader(freader);
String tmp=null;
while( (tmp=breaderF.readLine()) != null)
System.out.println(tmp);
breaderF.close();
}
catch(IOException e) {
System.out.println(e);
}
}
}
ヒント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...");
}
}
}
http://is.ocha.ac.jp/~gradthesis/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://is.ocha.ac.jp/~gradthesis/cat.jpg");
InputStream istream = targetURL.openStream();
FileOutputStream fout = new FileOutputStream("cat.jpg");
というインスタンスを作って、
istream.read()
で読んで、
fout.write(1バイト)
で書き出します。
解答例
import java.io.*;
import java.net.*;
//http://is.ocha.ac.jp/~gradthesis/cat.jpg
//をダウンロードして、cat.jpgというファイルを作るプログラム
public class URLJpeg {
public static void main (String argv[]) {
try {
URL targetURL = new URL("http://is.ocha.ac.jp/~gradthesis/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...");
}
}
}
上記のプログラム(URLJpeg.java, URLJpeg.class) を、出席番号+名前のフォルダにいれて、ZIP圧縮して提出してください。`
上記の例では写真データを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);
とします。
import java.io.*;
import java.net.*;
//http://is.ocha.ac.jp/~gradthesis/cat.jpg
//をダウンロードして、cat.jpgというファイルを作るプログラムを作ってください。
//データはテキストじゃなくて、バイナリーです。
public class URLJpeg2 {
public static void main (String argv[]) {
byte[] data = new byte[512];
try {
URL targetURL = new URL("http://is.ocha.ac.jp/~gradthesis/cat.jpg");
InputStream istream = targetURL.openStream();
FileOutputStream fout = new FileOutputStream("cat.jpg");
int datalength;
while(( datalength=istream.read(data)) != -1) fout.write(data, 0, datalength);
istream.close();
fout.close();
} catch (IOException e) {
System.out.println("error...");
}
}
}
ここでは512バイトを読み込むことにしました。でも、InputStreamのメソッドを見ると、available()というのがあります。
available() この入力ストリームのメソッドの次の呼出しによって、ブロックせずにこの入力ストリームから読み込むことができる(またはスキップできる)推定バイト数を返します。
これを使えば、適切な長さを見積もれるかもしれません。
curlというコマンドがあります。
curl http://ocha.ac.jp/
などとすると、htmlが見られますし、
curl http://is.ocha.ac.jp/~gradthesis/cat.jpg > cat.jpg
などとすると、ファイルとして保存できます。これに近いプログラムを作ってみましょう。
上記の引数のURLをファイルにするプログラムを作ってください。 また、cat.jpgのファイル取得でまとめて読むことでどれくらい速度が改善したかを、 レポートにしてください。レポートの書式は任意です。(テキストファイルでかまいません)
これらのjava, class, レポートのファイルをまとめて、出席番号+名前のフォルダに入れて、圧縮して、12月10日の授業の開始時間に提出してください。
宿題の演習11.1の プログラムのファイル(javaとclass)およびdata.datを、 学籍番号+名前のフォルダに入れて、zipで圧縮したファイルを提出してください。
[e100:?/Documents/java] siio% java TestString ochanomizu ochanomizu uzimonahco [e100:?/Documents/java] siio%
このソースは、
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");
}
}
}
である。
サンプルプログラムを実行するときは、
LinkedList<String> list = new LinkedList<String>();
などと定義すると良い。
Alice --> Bob --> Cindy --> DaveというLinkedListをつくって、 それからtoArray()メソッドでString配列を作ってfor each文で要素を印刷する
プログラム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>();
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");
}
}
}
EtoJ.javaとEtoJ.classをzipでまとめて提出してください。
159ぺーじから166ページを読んで、演習11.1をやってください。 書き出すファイルの名前はdata.datにしてください。
作ったファイルを
od -h dout.dat
または
hexdump dout.dat
してみてください。
このプログラムのファイル(javaとclass)およびdata.datを、学籍番号+名前のフォルダに入れて、zipで圧縮したファイルを11.26の授業の開始時に提出してもらいます。
次のプログラムを作って試してください。 引数が少ないとエラーが出るのを確認してください。
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 OsaifuUSD extends Osaifu {
public static void main(String argv[]) {
OsaifuUSD saifu1= new OsaifuUSD();
OsaifuUSD saifu2=new OsaifuUSD();
saifu1.in(1000);
saifu2.inUSD(5);
saifu2.inUSD(saifu1.outUSD(2));
saifu1.print();
saifu2.print();
}
public class OsaifuUSD extends Osaifu {
public int outUSD(int usd) {
okane-=usd * 90;
return usd;
}
public void inUSD(int usd) {
okane+=usd * 90;
}
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) {
return ( out( use * 90) / 90 );
}
public void inUSD(int usd) {
in( usd * 90 );
}
…
}
OsaifuUSDにprint()メソッドを追加して、 円表示の次の行に ( xxx USD ) と残高をUSD表示するようにしてください。 円表示を行う部分はスーパークラスOsaifuのインスタンスメソッドprint()を利用することを考えてみてください。
public void print() {
super.print();
System.out.println("( " + (okane / 90) + " usd )" );
}
以下のプログラムの中で、 クラス、インスタンス、サブクラス、スーパクラス、クラスメソッド、インスタンスメソッドがどれであり、 インスタンス化、継承がどこで行われているのか確認してください。 (importで始まる一行目はまだ説明していない内容なので小テストでは扱いません。無視してください)
import javax.swing.JFrame;
public class SampleWindow extends JFrame {
public static void main(String args[]) {
SampleWindow w = new SampleWindow();
w.setVisible(true);
}
}
今日作ったOsaifuUSD.javaと、OsaifuUSD.classを上記の方法で提出してください。
ことができるコンストラクタを作ろう。
これをmainから呼んで、上記のプログラムと同じことをするためには、
Osaifu saifu1 = new Osaifu(1000);//インスタンスを作る //最初の保持金額を1000円にする Osaifu saifu2 = new Osaifu(500);//インスタンスを作る //最初の保持金額を500円にする
とすることになる。
以下のコンストラクタを作ることになる。
Osaifu() { okane = 0; }
Osaifu(int x) { okane = x; }
これは以下のように書いても良い。
Osaifu() { this(0); }
Osaifu(int x) { okane = x; }
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();
}
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();
}
}
public int out(int x) {
if(x < okane ) {
okane = okane -x;
return x;
} else {
int nokori = okane;
okane =0;
return nokori;
}
}
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);
}
}
}
mainの引数argsは、Stringの配列で、コマンドラインで起動したとき、 コマンドの後に続けた書いた文字が入っています。 args[0], args[1], args[2] .... をすべてfor-each文で 表示するプログラムを書いてみましょう。
ヒント:for(String s: args)を使います
class ArgsTest2 {
public static void main (String args[]) {
for(String s: args)
System.out.println(s);
}
}
javac ArgsTest2 cat dog cow fox catdogcowfox
javac ArgsTest2 cat dog cow fox cat + dog + cow + fox
例えば以下のような実行結果が出るようにしてください
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();
}
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());
}
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という名前は同じでも、引数の違いで、異なる動作をさせることができます。
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();
}
今日作ったOsaifu.javaと、可能ならばOsaifu.classを上記の方法で提出してください。
ヒント
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]);
}
}
乱数を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を表示するプログラムを書け。 動作例を以下に示す。
解答例:
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");
}
}
}
解答例:
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%だと倍になるのに何年かかるだろうか。確かめてみよう。
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);
}
}
}
今日作ったKinri.javaとKinri.classを以下の方法で提出してください。
/home/isstaff/siio/Public/Drop Box/.に提出してください。ターミナル.appからなら
cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Boxとしてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。
3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。 欠席3回以下なら不可にはなりませんが、成績が下がるかもしれません.
http://docs.oracle.com/javase/jp/8/api/
http://www.amazon.co.jp/dp/4883732258/
買ってください。もしくは、先輩から安く譲ってもらってください。
Mac OS XはJavaと相性が良く、最初からjavaがインストールされています。 ということでWindowsより簡単に(というか何もしなくても)javaが使えます。
/.bash_profileを開いて以下の行を追加します
alias javac='javac -J-Dfile.encoding=UTF-8' alias java='java -Dfile.encoding=UTF-8'
class Hello {
public static void main (String args[]) {
System.out.println("hello java world!");
}
}
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.setVisible(true);
}
}
これをSimpleWindow.javaという名前で保存して、
javac SimpleWindow.java java SimpleWindow
とタイプしてコンパイル/実行します。 このプログラムは,ウィンドウのクローズボタンを押しても終了しません. プログラムを停止するには,ターミナルでコントロール-cを押します.
今日作ったSimpleWindow.javaとSimpleWindow.classを以下の方法で提出してください。
/home/isstaff/siio/Public/Drop Box/.に提出してください。ターミナル.appからなら
cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Boxとしてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。
学部「ヒューマンインタフェース」は出席重視の授業です.そのため70%以上出席お願いします. 授業回数が15回程度と見込まれますので,欠席が4回を超えた場合は単位が出ません. 欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください.
| 学籍番号 | 4月17日 | 4月24日 | 5月1日 | 5月8日 | 5月15日 | 5月22日 | 5月29日 | 6月12日 | 6月19日 | 6月26日 | 7月3日 | 7月10日 | 7月17日 | 7月24日 |
| 1320501 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320502 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320504 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320505 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320506 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320507 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 欠 | 出 | 出 |
| 1320508 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320509 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320510 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320511 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320512 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320514 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320516 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320517 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 |
| 1320518 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320519 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320520 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320522 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320523 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320525 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320526 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320527 | 出 | 出 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320528 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320529 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320530 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320531 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 |
| 1320532 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320533 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320534 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320535 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320536 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320537 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320539 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320540 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320541 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1320542 | 出 | 欠 | 出 | 出 | 出 | 出 | 欠 | 欠 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320543 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 出 |
| 1320544 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 1220527 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 欠 | 出 | 欠 |
| 1220529 | 出 | 出 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 出 |
| 1220533 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 学籍番号もしくはペンネーム |
| 1320501 |
| 1320502 |
| 1320504 |
| 1320508 |
| 1320512 |
| 1320514 |
| 1320516 |
| 1320523 |
| 1320525 |
| 1320530 |
| 1320536 |
| あこがれは早寝早起き |
| ヒューマン |
http://www.amazon.co.jp/dp/4781912605/
(授業開始直前や直後に差し替えされている可能性があります。)
以下は、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
}
間違いがあったら至急連絡ください。欠席回数が5回以上は単位が出ません。
| 学籍番号 | 履修 | 4月16日 | 4月23日 | 4月30日 | 5月14日 | 5月21日 | 5月28日 | 6月4日 | 6月11日 | 6月18日 | 6月25日 | 7月2日 | 7月9日 | 7月16日 | 7月23日 |
| 1220507 | 聴講 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1220510 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 出 | 出 | |
| 1220521 | 取消 | 出 | 欠 | 出 | 出 | 出 | 欠 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1220522 | 未履修 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1220530 | 未履修 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1220533 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1220534 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1220541 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | |
| 1320501 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320502 | 未履修 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320504 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320505 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320506 | 未履修 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320507 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 欠 | 出 | |
| 1320508 | 聴講 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320509 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320510 | 未履修 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320511 | 未履修 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320512 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320514 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320516 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320517 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | 欠 | |
| 1320519 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320520 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320522 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320523 | 未履修 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320524 | 取消 | 出 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320525 | 未履修 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320526 | 取消 | 出 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320528 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320529 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320530 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320531 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320532 | 未履修 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320533 | 聴講・取消 | 出 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320534 | 未履修 | 出 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320535 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320536 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320537 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320538 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320539 | 未履修 | 出 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 | 欠 |
| 1320540 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320541 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | |
| 1320542 | 出 | 出 | 欠 | 欠 | 出 | 出 | 出 | 出 | 出 | 欠 | 欠 | 欠 | 出 | 出 | |
| 1320543 | 出 | 出 | 欠 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 欠 | 出 | 出 | |
| 1320544 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 | 出 |
| 学籍番号 | 受理日 |
| 1320501 | 2015年9月6日 |
| 1320505 | 2015年9月11日 |
| 1320516 | 2015年8月28日 |
| 1320520 | 2015年9月9日 |
| 1320530 | 2015年9月11日 |
| 1320538 | 2015年9月9日 |
| 1220510 | 2015年9月1日 |
| 1220534 | 2015年9月11日 |
情報関連企業のなかで、将来性があると思う企業(就職したら安定していると思われる企業、長期にわたって株式投資しても良いと思う企業)を具体的にあげて、授業で説明したことがらに基づいて、その理由を書いてください。図を使っても良いです。
学部「情報と職業」は出席重視の授業です.そのため70%以上出席お願いします. 授業回数を15回程度と考えて、欠席が4回を超えた場合は単位をだしません (欠席には病欠を含みます)。. 欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください. また、病欠、公欠などは成績に影響しないよう考慮します。 証明する書類を持って申し出てください。
Googleで必死に検索してください。ぐぐりまくってください。 他のページの広告にどういう影響がでたか、教えてください。
(5/21の授業開始時に配布する用紙(A5)にその場で記入していただきます。)
身の回りの製品で、原価から考えて著しく格安な情報機器(ハードウェア)もしくはソフトウェア製品を見つけ出して、なぜ無料・格安なのか考察せよ。
(5/14の授業開始時に配布する用紙(A5)にその場で記入していただきます。)