![[PukiWiki] [PukiWiki]](image/pukiwiki.png) 
 3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。 欠席3回以下なら不可にはなりませんが、成績が下がるかもしれませんので、心当たり無ければ連絡ください。
| 学籍番号 | 10/5 | 10/12 | 10/19 | 10/26 | 11/2 | 欠席回数合計 | 
| 1520531 | 0 | 0 | 0 | 0 | 1 | 1 | 
| 1620501 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620502 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620503 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620504 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620505 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620506 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620507 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620508 | 0 | 0 | 0 | 1 | 0 | 1 | 
| 1620509 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620510 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620512 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620513 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620515 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620516 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620517 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620518 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620519 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620520 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620521 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620522 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620523 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620524 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620525 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620526 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620527 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620528 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620529 | 1 | 0 | 0 | 0 | 0 | 1 | 
| 1620530 | 0 | 0 | 1 | 1 | 1 | 3 | 
| 1620532 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620533 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620534 | 0 | 0 | 0 | 0 | 1 | 1 | 
| 1620535 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620536 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620537 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620538 | 1 | 0 | 0 | 0 | 0 | 1 | 
| 1620539 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620540 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620541 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 1620542 | 0 | 0 | 0 | 0 | 0 | 0 | 
次のプログラムを作って試してください。 引数が少ないとエラーが出るのを確認してください。
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");
		}
	}
}
である。
[e100:?/Documents/java] siio% java TestString ochanomizu ochanomizu uzimonahco [e100:?/Documents/java] siio%
ヒント:System.out.println()は改行するが、System.out.print()という関数は改行をしない
プログラム10.2を入力して実行してください。 サンプルプログラムを実行するときは、
LinkedList<String> list = new LinkedList<String>();
などと定義すると良い。 またコンパイルで注意が出るので、
javac -Xlint:unchecked LinkedListTest.java
というオプションをつけてコンパイルしてみてください。
プログラム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);
        }
}
toArray()メソッドで一覧表示するよう改造したLinkedListTest.javaとlinkedListTest.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
継承の話をしました。 別のクラスを継承することで、 差分だけを書いて機能を拡張していくことができます。
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();
		
	}
}
親のメソッドを活用しても良い
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にprint()メソッドを追加して、 円表示の次の行に ( xxx USD ) と残高をUSD表示するようにしてください。 円表示を行う部分はスーパークラスOsaifuのインスタンスメソッドprint()を利用することを考えてみてください。
	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というクラスの中で、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, 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();
	}
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;
		}
	}	
ことができるコンストラクタを作ろう。
これを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を、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
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);
       }
}
while文をfor文に変えてみる
できた人から2:30pmまで休憩してください。
例えば以下のような実行結果が出るようにしてください
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を、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
ヒント
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");
		}
	}
}
Score.javaとScore.classを、出席番号+名前(ローマ字)のフォルダに入れて、圧縮して、提出してください。
http://docs.oracle.com/javase/jp/8/docs/api/index.html
http://www.amazon.co.jp/dp/4883732258/
買ってください。もしくは、先輩から安く譲ってもらってください。
macOSはJavaと相性が良く、最初からjavaがインストールされています。 ということでWindowsより簡単に(というか何もしなくても)javaが使えます。
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を押します.
/home/isstaff/siio/Public/Drop Box/.に提出してください。ターミナル.appからなら
cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Boxとしてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。
/home/isstaff/siio/Public/Drop Box/.
に提出してください。ターミナル.appからなら
cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box
としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで 以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。