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

2019年10月10日:Javaの基礎、変数

今日の提出課題

cat + dogを表示する課題のjavaとclassを前回と同様にフォルダにコピーして、圧縮して提出してください。

文字列

C言語では文字列はただのバイト変数の配列でした。最後の値が0であることで、長さを知ることができる程度です(番兵方式)。 Javaでは文字列は、Stringクラスのインスタンスです。 なんのことかは後の授業で説明しますが、処理をする関数を内包している「構造体Structure」のようなものです。 なので、いろいろな操作が可能です。

文字列は""で括ります。

"Hello Java World!"

printlnできます。

System.out.println("Hello Java World!");

足し算もできます。

System.out.println("This is " + "a test.");

変数にも代入できます。変数の種類はStringです。オブジェクト指向の用語で説明すると、Stringクラスのインスタンスとしてworldを定義したということです。クラスは設計図、雛形、金型のようなもので、インスタンスはそれから作成された実体のようなものです。

String world = "Hello Java World!";

最初に作ったHello.javaプログラムを、String変数 worldという変数に代入してから表示するプログラムに書き換えてみましょう。

解答例:

class Hello {
public static void main (String args[]) {
        String world = "hello java world!";
        System.out.println(world);
        }
}

http://gyazo.com/8159f78165e17781a7110de3763c833c.png

ヒント

class ArgsTest {  
public static void main (String args[]) {
	System.out.println(args[0]);
        }
}

できてしまった人は以下をお願いします。

このプログラムで、引数が2個未満の場合はエラーになります。 2個未満の場合には、2個引数を描いてくださいというメッセージを出すよう変更しましょう。 .length関数でargsの長さを知ることができます。 if文はC言語と同じです。

if(args.length < 2) {
} else {
}

というように書けます。


配列

C言語では小規模な配列を使う場合、静的に確保した配列をよく使っていたと思います。 Javaでは、システムからメモリー確保して動的に確保した配列を使うのが一般的です。 C言語でもmalloc()関数でメモリーを確保したことがあると思います。 例えばint型の変数3個分のメモリを確保して、それをint型を示すポインターに入れて、配列として使いました。

//C言語での例です:
int *p;
*p = (int *)malloc(sizeof(int)*3);

Javaでも同じことをやります。 システムにお願いして、必要な量の配列を格納するメモリー領域を確保してもらいます。そのコマンドがnewです。

まずは配列の変数を定義して、次にnewコマンドで必要なメモリー領域を確保して、それが返すメモリーアドレス(に相当する値)を配列の変数に入れます。メモリーアドレスに相当する数値は、C言語ではポインターと言いましたが、Javaでは参照と言います。

int[] x;  (配列を参照する変数を定義する)
x = new int[3];   (int3個ぶんのメモリー領域をnewコマンドで取得して参照をxに代入する)

こうすると、プログラムの中からx[0]=1;とかx[2]=x[0];などと操作してこの配列を利用できます。

1行でまとめて書くこともあります。

int[] x = new int[3];

演習3

要素が100個のintの配列x[0]からx[99]を作って、それに1,2,3,4....,100という数字を入れて、さらにそれらをprintlnで表示するプログラムを作りましょう。先ほどのVartest.javaを改造して作ってください。for文で値を入れて、for文で表示してください。for文の使い方はC言語と同一です。

ヒント:

class Vartest {  
public static void main (String args[]) {
   
   //配列を定義します。
   //(略)
   
   
   //for文で値を入れます
   for(int i=0; i<100; i++) {
   //(略)
   }
   
   //for文で表示します
  for(int i=0; i<100; i++) {     //(略)
   }
}

第3章「変数」

Javaにおける基本データ型

C言語と違い、整数型のサイズが明確に決められました。char型は、C言語では1バイトでしたが、Javaでは1文字を表します。なので、コードによって1バイトだったり、多バイトだったりします。C言語では論理型がないので、charやintで代用していました。0とか1を代入してました。Javaでは専用のboolean型が用意されました。

先に作ったHello.javaを参考にVartest.javaというプログラムを作りましょう。 以下では、byte型変数を定義して、それを表示しています。 変数名は変えても良いです。 printlnの中では、文字列を連結しています。Javaでは文字列を+で連結できます。

class Vartest {  
public static void main (String args[]) {
	int x = 42;
        System.out.println("byte value x =" + x);
        }
}

これをもとに、short, int, long, char, float, double booleanの変数を全て追加して表示をしてください。intとcharを追加するなら、以下のようにします。変数名と代入する値は好きなものを使ってください。char型は漢字も試してください。ただしchar型は、1文字だけです。

class Vartest {  
public static void main (String args[]) {
	byte x= 42;
	int x1=  123456;
	char name = '椎';
        System.out.println("byte value x =" + x);
        System.out.println("int value x1 =" + x1);
        System.out.println("char value name =" + name);
        }
}

解答例:

class Vartest {  
public static void main (String args[]) {
	byte x_byte = 42;
	int x_int = 12345;
	short x_short = 123;
	long x_long = 12345678;
	char x_char = '椎';
	float x_float = 123.4f;
	double x_double = 3.14d;
	boolean x_boolean = true;
       System.out.println("byte value x_byte = " + x_byte);
       System.out.println("short value x_short = " + x_short);
       System.out.println("int value x_int = " + x_int);
       System.out.println("long value x_long = " + x_long);
       System.out.println("char value x_char = " + x_char);
       System.out.println("float value x_float = " + x_float);
       System.out.println("double value x_double = " + x_double);
       System.out.println("boolean value x_boolean = " + x_boolean);
       }
}

以下のように、整数型の変数に文字を代入して値を表示すると、文字コードが表示できる。 あなたのイニシャルを表す英文字の文字コードを表示するプログラムを作成しなさい。また、あなたの氏名の最初の文字(漢字やひらがな)についても調べなさい。

int myInitialCode1 = 'S', myInitialCode2 = '椎';
System.out.println(myInitialCode1);
System.out.println(myInitialCode2);

授業の最後の方で紹介する,Swingというフレームワークを使ってウィンドウを出してみます.

import javax.swing.JFrame;
public class SimpleWindow {

       public static void main(String argv[]) {
               JFrame f = new JFrame("私が作った最初の窓");
               f.setSize(200,100); 
               f.setVisible(true);
       }

}

これをSimpleWindow.javaという名前で保存して、

javac SimpleWindow.java
java SimpleWindow

とタイプしてコンパイル/実行します。 このプログラムは,ウィンドウのクローズボタンを押しても終了しません. プログラムを停止するには,ターミナルでコントロール-cを押します.

simplewindow.png

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

class Hello {  
public static void main (String args[]) {
        System.out.println("hello java world!");
        }
}

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

$ ls
Hello.java
$ cat Hello.java 
class Hello {  
public static void main (String args[]) {
        System.out.println("hello java world!");
        }
}

今は、Hello.javaファイルが一つしかありません。これをコンパイルします。

$ javac Hello.java  (コンパイルする)

コンパイルに成功するとHello.classというファイルができているはずです。lsコマンドで確認します。

$ ls
Hello.class	Hello.java

これはjavaコマンドで動作します。javaはインタープリータです。

$ java Hello      (実行する。.javaなどの拡張子は不要)
hello java world!   (結果)

今後の予定

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. お絵描きプログラムの完成度,作り込み
  2. 毎回の宿題の達成(参考程度)
  3. 出席状況(参考程度)

単位を出す条件

  1. 最終課題のお絵描きプログラムで最低限お願いした機能を実装してください。
  2. 3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。 (公欠、忌引などは欠席にしませんので連絡ください。病欠、電車遅延の遅刻は確認できるものを提出してください。)

授業用のフォルダを作る

授業の内容を入れておくフォルダを作ってください。Documentsの中にjavaというようなフォルダを作ると良いです。

出席表明アプリケーション

以下のアプリケーションで、授業開始に出席表明してもらいます。皆さんがクリックし終わったら、締め切ります。それまでにクリックできない人は遅刻とします。

b1128c100d39263a8480428af2d05da0.png

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

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

ヒューマンインタフェース2019年度前期

ヒューマンインタフェースのレポート

提出は任意です.もし良いレポートを提出いただけたら出席点の加算に使用します.

メールの標題は「ヒューマンインタフェースレポート: 17205XX」としてください。数字部分は出席番号です。 提出いただいた方はこのページでお知らせします。提出してしばらく経つのに、 自分の番号がなかなか表示されない場合は,受付されていないかもしれません.もう一度催促してください (提出を確認出来るよう締め切りより早めに提出していただくことをお勧めします)。

レポートの課題

出席状況

学部「ヒューマンインタフェース」は出席重視の授業です.そのため70%以上出席お願いします. 授業回数が13回ですので,欠席が3回を超えた場合は単位が出ません. 以下に授業全体の欠席状況を示す予定です。 欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください.

講義開催予定

宿題

下のリンク先のソースコードをコンパイルして、応答速度を図るプロログラムを作ってください。これを使って、みなさんの応答速度を図って、次回(2019年5月16日)の小テスト用紙(A5サイズ)で報告してください。

http://lab.siio.jp/index.php?CSL11HCI#k497ebbd

教科書

http://ec2.images-amazon.com/images/I/51SsP4P1UiL._SL500_AA300_.jpg

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

授業資料

  1. http://siio.jp/lecture/humaninterface/HCI_c1.ppt.pdf
  2. http://siio.jp/lecture/humaninterface/HCI_c2.ppt.pdf
  3. http://siio.jp/lecture/humaninterface/HCI_c3.ppt.pdf
  4. http://siio.jp/lecture/humaninterface/HCI_c4.ppt.pdf
  5. http://siio.jp/lecture/humaninterface/HCI_c5.ppt.pdf
  6. http://siio.jp/lecture/humaninterface/HCI_c6.ppt.pdf
  7. http://siio.jp/lecture/humaninterface/HCI_c7.ppt.pdf
  8. http://siio.jp/lecture/humaninterface/HCI_c8.ppt.pdf
  9. http://siio.jp/lecture/humaninterface/HCI_c9.ppt.pdf
  10. http://siio.jp/lecture/humaninterface/HCI_c10.ppt.pdf

(授業開始直前や直後に差し替えされている可能性があります。)

教科書サポートページ


このページについてのお問い合わせはsiio@is.ocha.ac.jpまで。


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