マルチメディアプログラミング実習 2017年度後期

欠席状況

3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。 欠席3回以下なら不可にはなりませんが、成績が下がるかもしれませんので、心当たり無ければ連絡ください。

学籍番号10/510/1210/1910/2611/2欠席回数合計
1520531000011
1620501000000
1620502000000
1620503000000
1620504000000
1620505000000
1620506000000
1620507000000
1620508000101
1620509000000
1620510000000
1620512000000
1620513000000
1620515000000
1620516000000
1620517000000
1620518000000
1620519000000
1620520000000
1620521000000
1620522000000
1620523000000
1620524000000
1620525000000
1620526000000
1620527000000
1620528000000
1620529100001
1620530001113
1620532000000
1620533000000
1620534000011
1620535000000
1620536000000
1620537000000
1620538111003
1620539000000
1620540000000
1620541000000
1620542000000

授業予定

11月2日

第8章 継承

継承の話をしました。 別のクラスを継承することで、 差分だけを書いて機能を拡張していくことができます。

http://gyazo.com/2c8ef14d8be63b9fc18c58d79f2f3879.png

Osaifuクラスを継承してOsaifuUSDクラスを作ってみよう

http://gyazo.com/f51ea5895aaab32bb30b9a940d91515d.png

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);
		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)

親のメソッドを活用しても良い

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)

OsaifuUSDにprint()メソッドを追加して、 円表示の次の行に ( xxx USD ) と残高をUSD表示するようにしてください。 円表示を行う部分はスーパークラスOsaifuのインスタンスメソッドprint()を利用することを考えてみてください。

http://gyazo.com/39a7b24a8c45e15ac55693592c2eb7cf.png

	public void print() {
		super.print();
		System.out.println("( " + (okane / 114) + " usd )" );
	}

継承でウィンドウを作る

授業の最初に、こんなウィンドウを作るプログラムを紹介しました。

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.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();
	}
	
}

小テスト練習

以下のプログラムの中で、 クラス、インスタンス、サブクラス、スーパクラス、クラスメソッド、インスタンスメソッドがどれであり、 インスタンス化、継承がどこで行われているのか確認してください。 (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を、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。

10月26日

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章 クラスとオブジェクトの操作

他の点との距離を返すメソッドの例を説明しました

	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クラスを作ってみよう

	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

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;
		}
	}	

つぎにOsaifuクラスにコンストラクタを追加してみよう

ことができるコンストラクタを作ろう。

これを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; }

本日のレポート

Osaifu.javaとOsaifu.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。

10月19日

第5章(つづき)

for-each文は新しい手法なので練習しましょう

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文で 表示するプログラムを書いてみましょう。

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);
       }
}

http://gyazo.com/1733defca0c709c41c69ea729320ab61.png

while文をfor文に変えてみる

できた人から2:30pmまで休憩してください。

第6章 クラスの基礎

クラスとインスタンスの説明をしました

http://gyazo.com/bbdd3587977a172f7fa7f00c4f5787e0.png

例えば以下のような実行結果が出るようにしてください

http://gyazo.com/deeb78a70a724a01ce76945235d42ab8.png

public static void main の説明をしました

http://gyazo.com/bdef2ab8e69f7f6e62273c2d67d7af2e.png

変数にはメソッド経由でアクセスするのが良いという説明をしました

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();
	}

}
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();

       }

本日のレポート

Point3D.javaとPoint3D.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。

10月12日

第3章

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章

第5章

演習

乱数を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");
		}
	}
}

本日のレポート

Score.javaとScore.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。

10月5日

javaのマニュアル

http://docs.oracle.com/javase/jp/8/docs/api/index.html

教科書

http://gyazo.com/de3288074dae1c75f6df4ef3c0b9b3d4.png

http://www.amazon.co.jp/dp/4883732258/

買ってください。もしくは、先輩から安く譲ってもらってください。

この講義の目的

  1. Javaでプログラムする
  2. オブジェクト指向の概念を理解してプログラミングする
  3. GUIプログラミングをする

この講義の順序

  1. Javaになれる(C言語などのプログラミング手法の復習)
  2. オブジェクト指向について理解する
  3. GUIプログラミングについて理解する(イベント駆動)
  4. お絵描きプログラムを作ってみる

成績評価

  1. 欠席は3回までです。欠席4回で自動的に不可になります。公欠、病欠は欠席にカウントしません。
  2. お絵描きプログラムの完成度,作り込み
  3. 毎回の宿題の達成(参考程度)
  4. 出席状況(欠席回数で減点します)
  5. 成績は研究室配属にも考慮します(予定)

第1章および第2章

macOSでJavaを使う

macOSはJavaと相性が良く、最初からjavaがインストールされています。 ということでWindowsより簡単に(というか何もしなくても)javaが使えます。

terminalを起動する

http://siio.jp/gyazo/7366bfab668207c6598c4d88ef70d2d4.png

テキストエディタを用意しておく

超簡単なプログラム(hello world)を作ってみる

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.png

出来上がったプログラムの提出方法

http://siio.jp/gyazo/dropbox.png

レポート提出方法

/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まで。


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