プログラミング言語 3
第 02 回( 2007 年 10 月 01 日)
今日の配布物
片面の用紙 1 枚
アンケート
今日の最後に回収します。
出欠を兼ねているので、必ず提出すること。
今日やること
http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/
にアクセスすると、教材があります。
2007
年10
月01
日分と書いてある部分が、本日の教材です。本日の内容
基本データ型
配列
制御構造
前回の課題の解答
プログラム(のソース)Hello.javaをコンパイル、実行しなさい。
レポートとして、
コンパイルの方法 実行の方法 実行結果を報告しなさい。
前回の課題
public class Hello {
public static void main(String[] args) { System.out.println("Hello, world!");
} }
public class Hello {
public static void main(String[] args) { System.out.println("Hello, world!");
} }
Hello.java
コンパイルの方法 コンソール上で と入力する。
実行の方法
コンソール上で と入力する。
実行結果
コンソールに Hello と出力される。
回答例
javac Hello.java javac Hello.java
java Hello
java Hello
基本的なデータ型
Java で使用できるデータ型
Java で使用できるデータ型
boolean
型 :true
またはfaulse
char
型 :16bit
のUnicode
文字byte
型 :8bit
符号付き整数short
型 :16bit
符号付き整数int
型 :32bit
符号付き整数long
型 :64bit
符号付き整数float
型 :32bit
浮動小数点数double
型 :64bit
浮動小数点数C
言語にあった符合無し整数の方はありません。変数
値を保存しておく変数を使用することができる。
使うためには、あらかじめ宣言する必要がある。
のように宣言する。 C 言語と同様の形で宣言できる。
宣言の時に、値を代入することもできる。
値の代入は、 = で行う。
int i,j;
char ch1;
long lo1;
int i=1;
char ch1='A';
i=1;
演算 その 1
Java でも、色々な演算子が使用できる。
算術演算子 算術演算子 算術演算子 算術演算子::::
x + y
:x
とy
の和x - y
:x
とy
の差x * y
:x
とy
の積x / y
:x
をy
で割った商x % y
:x
をy
で割った余り 関係演算子関係演算子 関係演算子 関係演算子::::
x < y
:x < y
のとき真(1
)、さもなければ偽(0) x <= y
:x <= y
のとき真(1
)、さもなければ偽(0) x > y
:x < y
のとき真(1
)、さもなければ偽(0) x >= y
:x > y
のとき真(1
)、さもなければ偽(0) x == y
:x = y
のとき真(1
)、さもなければ偽(0) x != y
:x != y
のとき真(1
)、さもなければ偽(0)
論理演算子 論理演算子 論理演算子 論理演算子::::
A && B
:A
かつB A || B
:A
もしくはB
!A
:A
の否定演算 その 2
その他にも、ビット演算を行う演算子とかがある。
x & y
:x
とy
のビットごとのAND x | y
:x
とy
のビットごとのOR x ^ y
:x
とy
のビットごとのXOR x << y
:x
をy
ビットだけ左シフトx >> y
:x
をy
ビットだけ算術右シフトx >>> y
:x
をy
ビットだけ論理右シフト演算 その 3
インクリメントとディクリメント インクリメント → 増加 ディクリメント → 減少
1
:x++
:x
の値を評価後、インクリメント2
:++x
:x
の値をインクリメント後、評価3
:x--
:x
の値を評価後、ディクリメント4
:--x
:x
の値をディクリメント後、評価上の意味
1
:y=x++
:y=x; x=x+1;
:値を渡してから、x
に1
を加える2
:y=++x
:x=x+1; y=x;
:x
に1
を加えてから、値を渡す3
:y=x--
:y=x; x=x-1;
:値を渡してから、x
から1
を引く4
:y=--x
:x=x-1; y=x;
:x
から1
を引いてから、値を渡す代入演算子
i+=2;
i+=2;
他にも、減算代入( -= )、乗算代入( *= )、除算代入
( /= )等、一通りあります。
加算代入:
整数型の変数 i に 2 を加えて i に代入したい i=i+2; とほとんど同じ意味。
配列
配列とは
配列とは、変数が沢山並んだようなもの。
使用する場合は、宣言しておく必要がある。C
言語とは宣言の仕方が異なっているので注意!。 サイズが10
の配列t
を宣言した場合は、t[0]
~t[9]
までの10
個 になる。t[0] t[1] t[2] t[3] t[4] t[5] t[6] t[7] t[8] t[9]
1 1 1 1 1 1 1 1 1 1
配列の宣言の仕方 その 1
配列を使う際には、宣言と領域確保を行う必要がある。
宣言の仕方 : 領域確保の仕方:
例えば、サイズ 10 の整数型の配列 t を宣言するなら、
とする。これで、 t[0] ~ t[9] までを使用できるようになる。
配列の型[] 配列名;
配列の型[] 配列名;
配列名 = new 配列の型[要素数];
配列名 = new 配列の型[要素数];
int[] t;
t = new int[10];
int[] t;
t = new int[10];
配列の宣言の仕方 その 2
宣言と領域確保を 1 行で書くこともできる。
たとえば、サイズ 10 の整数型の配列 t を宣言するなら、
配列が領域確保されたとき、各要素には初期値が入る。
整数型や浮動小数点型なら 0 に初期化される。
boolean がたなら false に初期化される。
文字型なら、 null に初期化される。
配列の型[] 配列名 = new 配列の型[要素数];
配列の型[] 配列名 = new 配列の型[要素数];
int[] t = new int[10];
int[] t = new int[10];
配列の宣言の仕方 その 3
領域確保したときに、初期値を与えることもできる。
この場合、サイズ n の配列になる。
たとえば、
とすると、サイズ 10 の配列が領域確保される。
配列名 = {値1,値2, … ,値n};
配列名 = {値1,値2, … ,値n};
int[] t = new int[10];
int[] t = new int[10];
配列の宣言 例
public class Sample02a {
public static void main(String[] args) { int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9};
t1[1]=1;
System.out.println(t1[0]);
System.out.println(t1[1]);
System.out.println(t2[3]);
} }
public class Sample02a {
public static void main(String[] args) { int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9};
t1[1]=1;
System.out.println(t1[0]);
System.out.println(t1[1]);
System.out.println(t2[3]);
} }
配列を宣言
t1[1]
に1
を代入 このプログラムを実行する場合、ファイル名は
Sample02a.java
に して下さい。t1[0]
の値を表示t1[1]
の値を表示t2[3]
の値を表示System.out.println が何かは、次回以降にやります。
制御構造
制御
C 言語と同様に、 Java にも制御を行う命令がある。
分岐や繰り返しの処理を行いたい場合は、
if ~ else : 条件判定
while : 繰り返し
do ~ while : 繰り返し
for : 繰り返し
switch : 条件判定
等を使用する。
if ~ else
if-else 文、 if-else if 文
• 式 1 を評価した結果が真(すなわち 0 でない値)である 場合、文 1 を実行し文 2 をスキップする。
• 式 1 を評価した結果が偽(すなわち 0 )である場合、文 1 をスキップし文 2 を実行する。
• else 以降は省略しても良い。
if( 式 1) 文 1 else 文 2
if ~ else 文の説明
int t;
(中略)
if(t==1){
文1 }else{
文2 }
t=1のとき t=2のとき
•
式を評価した結果が真である場合、文
1
を実行し文2
をスキップ•
偽である場合、文
1
をスキップして、文2
を実行while
while
• 式を評価した結果が真(すなわち 0 でない値)である間、
文の実行を繰り返す。
• break があると、そこから while の外までジャンプする。
while( 式 ) 文
do ~ while の説明
int t;
(中略)
t=1;
while(t<10){
文3 t++;
}
t<10を満たす間、
この部分が繰り返される
•
式を評価した結果が真である間、文の実行を繰り返す。
このタイミングで、
式の評価が行われる。
do ~ while
while
• 式を評価した結果が真(すなわち 0 でない値)である間、
文の実行を繰り返す。
• while 文との違いは、式を評価するタイミング。
• break があると、そこから while の外までジャンプする。
do{
文
}while( 式 )
do ~ while の説明
int t;
(中略)
t=1;
do{
文3 t++;
}while(t<10)
t<10を満たす間、
この部分が繰り返される
•
式を評価した結果が真である間、文の実行を繰り返す。
このタイミングで、
式の評価が行われる。
制御 その 4 for
for
• 最初に式 1 を評価する。
• 式 2 を評価した結果が真である間、
文の実行と式 3 の評価を繰り返す。
• break があると、そこから for の外までジャンプする。
for( 式 1; 式 2; 式 3) 文
do ~ while の説明
int t;
(中略)
for(t=1;t<10;t++){
文
} t<10を満たす間、
この部分が繰り返される
•
最初に式1
を評価する。•
式2
を評価した結果が真である間、文の実行と式
3
の評価を繰り返す。t=1からスタート。
文を実行するたびに、t++する。
switch 文の説明
switch( 整数式 ){
case ラベル 1:
文 1
case ラベル 2 : 文 2
default:
文 3 }
整数式を評価し、対応するラ ベルまでジャンプします。
対応するラベルが無い場合、
default にジャンプします。
ラベルの数は任意です。
default は省略可能です。
途中で抜けるときは、 berak
を用います。
switch 文の説明
int t;
(中略)
switch(t){
case 1: 文1
case 2: 文2; break;
case 3: 文3 default:文3 }
t=1のとき t=2のとき t=3のとき t=4のとき
•
対応するラベルまでジャンプ•
対応するラベルがないとdefault
にジャンプ• break
でswitch
文の外に課題のヒント
public class Sample02a {
public static void main(String[] args) { int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9};
t1[1]=1;
System.out.println(t1[0]);
System.out.println(t1[1]);
System.out.println(t2[3]);
} }
public class Sample02a {
public static void main(String[] args) { int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9};
t1[1]=1;
System.out.println(t1[0]);
System.out.println(t1[1]);
System.out.println(t2[3]);
} }
最初の
2
行は 弄らなくてOK
。変数が必要なら ここら辺で宣言する このプログラムを実行する場合、
ファイル名は
Sample02a.java
に して下さい。ここらへんを差し替えて
t[i]
の値を表示する。誤植のおもひで
23
ページ目左側5
行目:誤:
else{
正: