プログラミング入門1 · java 1 第3回 9. 復習 変数と型 •...
TRANSCRIPT
Java 1 第3回 3
不要ファイルの掃除
• 前回デスクトップにファイルをダウンロードし た場合、次のものを削除してください
– week02.zip
• デスクトップにファイルを置きすぎると、コン ピュータをシャットダウンできなくなります
Java 1 第3回 6
復習:プログラムの書き方
public class プログラムの名前
{
public static void main(String[] args) {
System.out.println("Hello!");
ここに命令をいくつ並べてもよい
}
}
Java 1 第3回 7
復習 算術演算のデータ
データには型がある
• 整数型(int)0, 1, 3, 563, -32, -1024
• 実数型1.0, 3.14, -73.5, 18.(=18.0), .5 (=0.5)
– 小数点つきの数
– 正確には浮動小数点数(floating point number) と呼ばれる
Java 1 第3回 8
復習 算術演算の結果
• 整数と整数の演算結果は整数である。12 + 34 の結果は整数の46
• 実数と実数の演算結果は実数である。4.0 + 1.0 の結果は実数の 5.0
• 整数と実数、あるいは実数と整数の演算結果 は実数である。
7.0 / 3 の結果は実数の2.3333333333333335
Java 1 第3回 9
復習 変数と型
• 変数は何かを入れておく箱のようなもの– 変数は名前が必要
– どんな種類(整数や実数など)のデータを入れる箱である かを予め決めなければならない。
– これを型という
• 宣言:
変数を用意すること– 変数の型と名前を指定しなければならない
– 宣言されていない変数は使えない
• 代入:
変数にデータを入れること
• 参照:
変数に入っているデータを利用すること
Java 1 第3回 10
宣言:変数を用意する
int x;
のようにすると、整数(integer)を入れるための変数 x が用意される。
double a;
のようにすると、実数を入れるための変数
a が用意される。
int型の変数
x を宣言する
double型の変数
a を宣言する
行末のセミコロン
(;) を忘れないように。
Java 1 第3回 16
整数をユーザが入力し、それをそのまま出力する (こんな感じ)
package j1.lesson03;
import java.io.*;
public class EchoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input:");int input = Integer.parseInt(reader.readLine());System.out.println(input);
}}
Java 1 第3回 17
実行すると:
プログラムは一時的に停止して、
コンソール画面へのユーザの入力を待っている。
package j1.lesson03;
import java.io.*;
public class EchoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input:");
int input = Integer.parseInt(reader.readLine());System.out.println(input);
}}
Java 1 第3回 19
入力を行うプログラムの骨格
package [パッケージ名
(j1.lesson03など)];
import java.io.*;
public class [クラス名
(Helloなど)] {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 以下にプログラムを書く
} }
Java 1 第3回 20
コンソールに入力された整数を 取得する命令
int input = Integer.parseInt(reader.readLine());
この命令の実行する内容
1.コンソールからのユーザの入力を待つ(Enterキー が押されるまで)
2.入力された整数データをint型変数inputに代入
3.完了
int input;input = Integer.parseInt(reader.readLine());
どちらでもOK
Java 1 第3回 21
次の例をトレースしてみよう
package j1.lesson03;import java.io.*;
public class EchoTwoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input (a):");int a = Integer.parseInt(reader.readLine());System.out.print("input (b):");int b = Integer.parseInt(reader.readLine());System.out.println("aの値は" + a);System.out.println("bの値は" + b);
}}
Java 1 第3回 22
入力のための準備
package j1.lesson03;import java.io.*;
public class EchoTwoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input (a):");int a = Integer.parseInt(reader.readLine());System.out.print("input (b):");int b = Integer.parseInt(reader.readLine());System.out.println("aの値は" + a);System.out.println("bの値は" + b);
}}
Java 1 第3回 23
「入力のための準備」は種を明かせば BufferedReader型変数readerの宣言と初期化
でも今は「準備」という理解でよい
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader reader;reader = new BufferedReader(new InputStreamReader(System.in));
したがって、どちらでもOK
右辺の
new …については後で勉強する
Java 1 第3回 24
コンソールに"input (a):"という文字列を出力し コンソールからの整数の入力をint型変数aに代入する
package j1.lesson03;import java.io.*;
public class EchoTwoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input (a):");int a = Integer.parseInt(reader.readLine());System.out.print("input (b):");int b = Integer.parseInt(reader.readLine());System.out.println("aの値は" + a);System.out.println("bの値は" + b);
}}
Java 1 第3回 25
コンソールに"input (b):"という文字列を出力し コンソールからの整数の入力をint型変数bに代入する
package j1.lesson03;import java.io.*;
public class EchoTwoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input (a):");int a = Integer.parseInt(reader.readLine());System.out.print("input (b):");int b = Integer.parseInt(reader.readLine());System.out.println("aの値は" + a);System.out.println("bの値は" + b);
}}
Java 1 第3回 26
int型変数a, b に格納されている値を出力
package j1.lesson03;import java.io.*;
public class EchoTwoInt {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("input (a):");int a = Integer.parseInt(reader.readLine());System.out.print("input (b):");int b = Integer.parseInt(reader.readLine());System.out.println("aの値は" + a);System.out.println("bの値は" + b);
}}
Java 1 第3回 28
コンソールに入力された実数を 取得する命令
double input = Double.parseDouble(reader.readLine());
この命令の実行する内容
1.コンソールからのユーザの入力を待つ(Enterキーが押さ れるまで)
2.入力された実数データをdouble型変数inputに代入
3.完了
Java 1 第3回 29
実数型の入力、出力の例をトレースし
てみよう
package j1.lesson03;import java.io.*;
public class EchoDouble {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("実数をひとつ入力してください:");double input = Double.parseDouble(reader.readLine());System.out.println("入力された実数は" + input);
}}
Java 1 第3回 30
入力のための準備
package j1.lesson03;import java.io.*;
public class EchoDouble {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("実数をひとつ入力してください:");double input = Double.parseDouble(reader.readLine());System.out.println("入力された実数は" + input);
}}
Java 1 第3回 31
コンソールに
"実数をひとつ入力してください: " と出力して コンソールからの実数の入力をdouble型変数inputに代入する
package j1.lesson03;import java.io.*;
public class EchoDouble {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("実数をひとつ入力してください:");double input = Double.parseDouble(reader.readLine());System.out.println("入力された実数は" + input);
}}
Java 1 第3回 32
double型変数inputに格納されている
実数データをコンソールに出力する
package j1.lesson03;import java.io.*;
public class EchoDouble {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("実数をひとつ入力してください:");double input = Double.parseDouble(reader.readLine());System.out.println("入力された実数は" + input);
}}
Java 1 第3回 34
if 文 (if statement)
if ( a > 0 ) b = a * 3;
•aの値が0より大きいときだけ代入文b = a * 3;が実行される。
•a > 0 は条件式とよばれる
•条件式はboolean型の値(trueかfalseのどちらか)をとる。
•aの値が0より大きいとき条件式a > 0の値はtrueとなり、そうでない
ときfalseとなる。
•この「>」は比較演算子と呼ばれる。
Java 1 第3回 35
いろいろな比較演算子
条件式 意味
a == b aとbが等しければtrue、そうでなければfalse
a != b aとbが等しくなければtrue、そうでなければfalse
a >= b aがbより大きいか等しければtrue、そうでなければfalse
a <= b aがbより小さいか等しければtrue、そうでなければfalse
a > b aがbより大きいければtrue、そうでなければfalse
a < b aがbより小さければtrue、そうでなければfalse
Java 1 第3回 37
if-else 文 (if-else statement)
if ( a > 0 )b = a * 3;
elseb = 0;
aの値が0より大きいときだけ代入文b = a * 3;が実行され、
そうでない場合は代入文b = 0が実行される
Java 1 第3回 38
ブロックで命令を束ねる
if ( a > 0 ) {b = a * 3;d = b + 8;
} else b = 5;
if ( a > 0 ) {b = a * 3;d = b + 8;
} else { b = 5;d = 6;
}
Java 1 第3回 39
次のプログラムをトレースしてみよう
package j1.lesson03;import java.io.*;
public class Umbrella {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("降水確率を入力してください:");int chanceOfRain = Integer.parseInt(reader.readLine());System.out.println("降水確率は" + chanceOfRain + "% です。");if (chanceOfRain >= 50)
System.out.println("傘を忘れずに。");else System.out.println("傘はいりません。");System.out.println("いってらっしゃい。");
} }
Java 1 第3回 40
入力のための準備package j1.lesson03;import java.io.*;
public class Umbrella {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("降水確率を入力してください:");int chanceOfRain = Integer.parseInt(reader.readLine());System.out.println("降水確率は" + chanceOfRain + "% です。");if (chanceOfRain >= 50)
System.out.println("傘を忘れずに。");else
System.out.println("傘はいりません。");System.out.println("いってらっしゃい。");
} }
Java 1 第3回 41
コンソールに"降水確率を入力してください"と出力し コンソールから整数の入力をint型変数chanceOfRainに代入
package j1.lesson03;import java.io.*;
public class Umbrella {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("降水確率を入力してください:");int chanceOfRain = Integer.parseInt(reader.readLine());System.out.println("降水確率は" + chanceOfRain + "% です。");if (chanceOfRain >= 50)
System.out.println("傘を忘れずに。");else
System.out.println("傘はいりません。");System.out.println("いってらっしゃい。");
} }
Java 1 第3回 42
int型変数chanceOfRainの値をコン
ソールに出力する(前後に飾りつき)package j1.lesson03;import java.io.*;
public class Umbrella {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("降水確率を入力してください:");int chanceOfRain = Integer.parseInt(reader.readLine());System.out.println("降水確率は" + chanceOfRain + "% です。");if (chanceOfRain >= 50)
System.out.println("傘を忘れずに。");else
System.out.println("傘はいりません。");System.out.println("いってらっしゃい。");
} }
Java 1 第3回 43
chanceOfRainの値が50以上なら
"傘を忘れずに" そうでなければ"傘はいりません。" を出力
package j1.lesson03;import java.io.*;
public class Umbrella {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("降水確率を入力してください:");int chanceOfRain = Integer.parseInt(reader.readLine());System.out.println("降水確率は" + chanceOfRain + "% です。");if (chanceOfRain >= 50)
System.out.println("傘を忘れずに。");else
System.out.println("傘はいりません。");System.out.println("いってらっしゃい。");
} }
Java 1 第3回 44
int型変数chanceOfRainの値に関係なく実行
package j1.lesson03;import java.io.*;
public class Umbrella {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("降水確率を入力してください:");int chanceOfRain = Integer.parseInt(reader.readLine());System.out.println("降水確率は" + chanceOfRain + "% です。");if (chanceOfRain >= 50)
System.out.println("傘を忘れずに。");else
System.out.println("傘はいりません。");System.out.println("いってらっしゃい。");
} }
Java 1 第3回 45
if文の連鎖 100以上の値は警告する
if (chanceOfRain > 100) System.out.println("降水確率は0~100でなければなりません。");
else if (chanceOfRain >= 50)System.out.println("傘を忘れずに。");
elseSystem.out.println("傘はいりません。");
Java 1 第3回 46
if文の連鎖 負の値も警告する
if (chanceOfRain > 100) System.out.println("降水確率は0~100でなければなりません。");
else if (n < 0)System.out.println("降水確率は0~100でなければなりません。");
else if (chanceOfRain >= 50)System.out.println("傘を忘れずに。");
elseSystem.out.println("傘はいりません。");
Java 1 第3回 49
テストドライバの導入1. プロジェクト「java20XX」にある「test」の左側の「+」をクリック2. ツリーが展開されるので「install-libraries.xml」を右クリック3. 「実行(R)」にマウスカーソルを合わせる4. 「1 Ant ビルド」をクリック5. 「コンソール」タブに"BUILD SUCCESSFUL"と表示されれば成功6. eclipseの画面でプロジェクト「java20XX」を右クリック7. メニューが表示されるので、「更新」あるいは「最新表示」をクリック8. week03.zip をデスクトップなどにダウンロード9. eclipseの画面でプロジェクト「java20XX」を右クリック10. メニューから「インポート(I)」を選択11. 「インポート」ウィンドウが表示されるので、「Zip ファイル」を選択12. 「次へ(N)」をクリック13. 宛先フォルダー(L): が「java20XX」になっていることを確認14. From archive file: の右側にある「参照(R)...」あるいは
「ブラウズ(R)...」をクリック
15. ファイルダイアログが表示されるので、ダイアログ内に表示されたダウンロードしたファイルを
ダブルクリック
16. 前の画面に戻るので、From zip file: のエリアに正しいパスが入力されていることを確認17. フォルダ「/」の左にチェックがついていることを確認
(ついていなければチェックボックスをク
リック)
18. 「警告を出さずに既存リソースを上書き」にチェックがついていることを確認
(上書きしたくない
ファイルがある場合はチェックを外す)
19. 「終了
(F)」をクリック
Java 1 第3回 50
テストドライバの導入に成功すると
• プロジェクト「java20XX」の中の「test」という フォルダに「j1.lesson03」という名前のファイ ルが作成される。
• このファイルには今週使用するテスト一式が 記述されている。
Java 1 第3回 52
パッケージの作成
1. 「java20XX」プロジェクトの左側にある「+」をクリック
2. ツリーが展開されるので、「src」の上で右クリック
3. マウスカーソルを「新規」に合わせる
4. 「パッケージ」をクリック
Java 1 第3回 53
クラスの作成 クラス
= プログラム
と思ってよい
1. 先ほど作成したパッケージ 「j1.lesson03」の上で右クリック
2. マウスカーソルを「新規」に合わせる
3. 「クラス」をクリック
4. クラス名は
Adder とする。
Java 1 第3回 54
実際のソースファイル
• この教室でパッケージ
j1.lesson03 に Adder クラスを作成すると
U:¥Eclipse3.1¥Windows¥java20XX¥src¥j1¥lesson03¥Adder.java
というファイルができる
Java 1 第3回 55
以下のようにプログラムの骨格を書いて 保存(自動コンパイル) Ctrl+S
package j1.lesson03;import java.io.*;
public class Adder {public static void main(String[] args) throws IOException {
}}
Java 1 第3回 56
ここで骨格テスト
1. testフォルダの中にあるj1.lesson03.xml を 右クリック
2. 「ファイル」メニューの中にある「Adderに対 する骨格テスト」を選択し実行する
Java 1 第3回 57
骨格テストのエラーメッセージ
メッセージ 詳細
クラスが存在しませんj1.lesson03 に Adder クラスが存在していない。
パッケージやクラス名を確認
クラスがpublicで宣言されてい
ませんclass の前に public の指定がない。
mainメソッドが存在しませんpublic static void main(String[]) が存在していない。
mainという名前やString[]の部分を確認
mainメソッドがpublicで宣言さ
れていませんmainメソッドを作る際に
public が抜けている。
mainメソッドがstaticで宣言さ
れていませんmainメソッドを作る際に
static が抜けている。
mainメソッドがvoidで宣言され
ていませんmainメソッドを作る際に
void 以外を指定している。
mainメソッドにthrows IOExceptionの指定があり
ません
mainメソッドを作る際にthrows IOExceptionの指定
を行っていない。
Java 1 第3回 58
mainメソッドの中身を書く このプログラムの意味が分かりますか
package j1.lesson03; import java.io.*;
public class Adder {public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 一つ目の整数を入力させるSystem.out.print("一つ目の整数を入力:");int input1 = Integer.parseInt(reader.readLine());// 二つ目の整数を入力させるSystem.out.print("二つ目の整数を入力:");int input2 = Integer.parseInt(reader.readLine());System.out.println("合計は:" + (input1 + input2));
}}
Java 1 第3回 59
プログラムの実行
1. 「Adder.java」の上で右クリック
2. メニューが表示されるので、「実行(R)」にマ ウスカーソルを合わせる
3. 「1 Java アプリケーション」をクリック
4. コンソールでプログラムのメッセージにした がって入力をしてみよう。
5. 結果に納得できただろうか。
Java 1 第3回 60
機能テスト
1. Jtafウィンドウの「ファイル」メニューの中に ある「Adderに対する機能テスト」を選択し実
行
2. エラーが出たらメッセージをよく読みソース プログラムを直して、今までのステップを繰 り返す
Java 1 第3回 61
条件分岐を行うプログラム
1. 先ほど作成したパッケージ
「j1.lesson03」 の上で右クリック
2. マウスカーソルを「新規」に合わせる
3. 「クラス」をクリック
4. クラス名は
Sign とする
5. 先と同じ手順でクラスを作成する
Java 1 第3回 62
以下のようにプログラムの骨格を書いて 保存(自動コンパイル) Ctrl+S
package j1.lesson03;import java.io.*;
public class Sign {public static void main(String[] args) throws IOException {
}}
ここで骨格テストを実施する。
Java 1 第3回 63
変数の初期化と宣言を分けてもよい 以下の2つは同等
// 一つ目の整数を入力させるSystem.out.print("一つ目の整数を入力:");int input1 = Integer.parseInt(reader.readLine());// 二つ目の整数を入力させるSystem.out.print("二つ目の整数を入力:");int input2 = Integer.parseInt(reader.readLine());
int input1, input2;// 一つ目の整数を入力させるSystem.out.print("一つ目の整数を入力:");input1 = Integer.parseInt(reader.readLine());// 二つ目の整数を入力させるSystem.out.print("二つ目の整数を入力:");input2 = Integer.parseInt(reader.readLine());
Java 1 第3回 64
mainメソッドの中身を書く ひとつの命令文を書く度に保存(自動コンパイル)
package j1.lesson03;import java.io.*;
public class Sign {public static void main(String[] args) throws IOException {
BufferedReader reader= new BufferedReader(new InputStreamReader(System.in));
// 実数を入力させるSystem.out.print("値を入力:");double input = Double.parseDouble(reader.readLine());if (input == 0) {
System.out.println("入力された値は0");} else if (input > 0) {
System.out.println("入力された値は正の値");} else {
System.out.println("入力された値は負の値");}
}}
Java 1 第3回 65
実行してみよう
続けて機能テスト
• コンソールから入力を適切に行い
• 結果が期待通りになるか確認
• コンソール入力をいろいろ変えてプログラム が正しいことを検証しよう。どうすればよいテ ストになるだろうか。
• 機能テストはその点をきちんとやるために用 意されている。
Java 1 第3回 66
課題
各自のペースで
「第03週目の課題」をやってみよう
1. http://java.cis.k.hosei.ac.jp/ をブラウザで 開く
2. 第03回 – Conditional Branch (if-else) - を クリック
3. 第03週目課題をクリック
Java 1 第3回 67
課題0302のヒントa, b, c に入力
if(a >= b){if(a >= c)
aが最大else
cが最大}else if (b >= c)
bが最大else
cが最大
a b c