Upload
ula
View
54
Download
0
Embed Size (px)
DESCRIPTION
第 1 回 プログラムの基本. 他人が読めるプログラムを書く. 学習目標. Java プログラムを書き、動かせる コンパイルし、実行できる 他人が読めるプログラムが書ける インデントをつけることができる 適切な名前をつけることができる 適切なコメントをつけることができる 基本的な Java 文法を説明できる 変数と代入について説明できる 出力する方法について説明できる 条件分岐のしくみを説明できる. 1.1 Java プログラム を動かしてみましょう. 1.1.1 基本的な流れ 1.1.2 実際に書いてみましょう ① JDK のインストール - PowerPoint PPT Presentation
Citation preview
第 1 回 プログラムの基本
他人が読めるプログラムを書く
学習目標 Java プログラムを書き、動かせる
コンパイルし、実行できる 他人が読めるプログラムが書ける
インデントをつけることができる 適切な名前をつけることができる 適切なコメントをつけることができる
基本的な Java 文法を説明できる 変数と代入について説明できる 出力する方法について説明できる 条件分岐のしくみを説明できる
1.1 Java プログラムを動かしてみましょう
1.1.1 基本的な流れ 1.1.2 実際に書いてみましょう
①JDK のインストール ② エディタを開く ③ ソースコードを書く ④ 保存する ⑤ コンパイルする ⑥ 実行する
1.1.1 基本的な流れ
ソースコード バイトコード
コンパイル 実行
コンピュータが実行できる命令
人間が書くプログラム (Java)
1.1.2 実際に書いてみましょう
①JDK のインストール テキストを参照
② エディタを開く テキストを参照
③ ソースコードを書く
public class Example1_1 {
public static void main(String[] args) { System.out.println(" 自動販売機のサービスが開始されました "); }
}
Example1_1.java
ファイル名の拡張子は .java同じ名前にすること
例題 1-1(Example1_1.java)
class って何? クラスとは? ( 第4回から詳しくやり
ます ) Java におけるプログラムの単位 Java ではすべてのプログラムはクラスに
書かれます。 ファイル名とクラス名は同じにします。
クラス
プログラム
クラス
プログラムクラス
クラス
main って何? main() メソッドは、 Java のプログラム
のスタート地点です。各プログラムに必ず一つ必要です。
クラス
プログラムクラス
クラスmain
④ 保存する 場所に注意してください(整理しない
と後でわからなくなります) objprog フォルダ ( ディレクトリ ) を作成し
ます。 その中に毎回のフォルダを作成します。
( 今回は objprog01)
objprog objprog01
objprog02
…
Example1_1.java
⑤ コンパイルする
objprog01
Example1_1.java
Example1_1.class
1. objprog01 ディレクトリに移動します。
2. コンパイルコマンド「 javac Example1_1.java 」を実行します。
3. Example1_1.classファイルができれば成功。
⑥ 実行する1. 実行コマンド
「 java Example1_1 」を実行します。
2. 「自動販売機のサービスが開始されました」メッセージが表示されれば実行完了!
1.2 自動販売機プログラミング
1.2.1 買うことのできる商品を提示する ① 商品と種類 ② 商品種類を番号で扱う
1.2.1 買うことのできる商品を提示する
商品のリストを提示するプログラム 商品を売るためには、取り扱う商品を提示
する必要がある
① 商品と種類 利用者が商品を選ぶときは、商品その
もので選ぶわけではなく、種類で選びます
コーラ Aコーラ B
コーラ C コーラ
コーラ C を選ぶわけではない。コーラならどれでも良い
「商品」と「商品種類」 本講座では、実際の商品のことを「商
品」、種類のことを「商品種類」と呼びます
商品
商品種類
「商品種類」の表示を行う 買える商品を提示するプログラム
=商品種類のリストを提示するプログラム しばらくは CUI で考えます。
GUI CUI
「コーラ」は販売中です。「ソーダ」は販売中です。「緑茶」は販売中です。
② 商品種類を番号で扱う 簡単にするために、しばらく商品種類
は番号だけで扱うことにします
1001
1002
1003
1004
1001 番は販売中です。1002 番は販売中です。1004 番は販売中です。
1.3 他人が読めるプログラムを書く
1.3.1 人が読めるプログラムとは? ① インデントが付けられている ② 変数に適切な名前が付けられている ③ コメントがかかれている
1.3.2 コメントの書法 ① コメントとプログラムの目的 ② 目的の階層構造 ③ コメントの種類
1.3.1 他人が読めるプログラムとは?
public class Example1_2 {public static void main(String[] args) {System.out.println(" 自動販売機のサービスが開始されました ");int x;x = 1001;System.out.println(x+ " は販売中です。 ");}}
例題 1-2(Example1_2.java)
他人が読めないプログラム
① インデントを付ける
public class Example1_2 {
public static void main(String[] args) {
System.out.println(" 自動販売機のサービスが開始されました "); int x; x = 1001; System.out.println(x+ “ は販売中です。” );
}
}
例題 1-2 改①(Example1_2.java)
ブロック
ブロックの中のブロック
インデント(1) ブロック プログラム中で {} で囲まれた部分をブ
ロックといいます
public static void main{ … for(int i=0;i<10;i++){ … }
}
インデント(2) ブロックの中に書かれているコードを字下げします (Tab1 つ , または space2つ分 )
public static void main{ … for(int i=0;i<10;i++){ … }
}
ブロックに入るごとに一つ字下げします。
② 適切な名前を付ける int x; x = 1001; System.out.println(x+ “は販売中です。” );
int itemType; itemType = 1001; System.out.println(itemType+ “は販売中です。” );
x とは、取り扱う商品種類の番号のことですから
名前付け規則 Java で使われる基本的な名前付け規則
クラス名 最初の文字は大文字にする。
(複数の単語を繋げた変数名の場合は、各単語の最初の文字を大文字にする。)
ex) String,StringBuffer,House,MyHouse 変数名、メソッド名
最初の文字は小文字にする。 ex) name,myName,move(),getString()
適切な名前付けをしたプログラム
public class Example1_2 {
public static void main(String[] args) {
System.out.println(" 自動販売機のサービスが開始されました "); int itemType; itemType = 1001; System.out.println(itemType+ “ は販売中です。” );
}
}
例題 1-2 改②(Example1_2.java)
③ コメントが書かれている コンテクストが分からない他人が読めるようにする
// 取り扱う商品種類を提示するプログラムpublic class Example1_2 {
public static void main(String[] args) {
System.out.println(“ 自動販売機のサービスが開始されました” ); int itemType; itemType = 1001; System.out.println(itemType+ " は販売中です。 "); }}
Java におけるコメントの記述方法
/* 範囲指定コメント*/public class Example1_2 {
public static void main(String[] args) { // 行コメント System.out.println(“ 自動販売機のサービスが開始されました” ); int itemType;// 行コメント itemType = 1001; System.out.println(itemType+ " は販売中です。 "); }}
1.3.2 コメントの書法 コメントは内容が重要!
他人に分かるコメントとは?
① コメントとプログラムの目的
public class Example1_2 {
public static void main(String[] args) { //… System.out.println(“ 自動販売機のサービスが開始されました” ); //… int itemType; //… itemType = 1001; //… System.out.println(itemType+ " は販売中です。 "); }}
コメントをつけてみよう
まずいコメント
public class Example1_2 {
public static void main(String[] args) { // 「自動販売機が開始しました」を表示する System.out.println(“ 自動販売機のサービスが開始されました” ); //int 型の itemType 変数を定義する int itemType; //itemType 変数に 1001 を代入する itemType = 1001; //itemType を表示する System.out.println(itemType+ " は販売中です。 "); }}
何故まずいのか考えてみよう!
プログラムの解説はいらない//itemType 変数に 1001 を代入するitemType = 1001;
itemType 変数に 1001 を代入していることは、プログラムを見れば明らか
これでは、何故この人は 1001 を代入しているのか、他人にわからない
すべてのプログラムには意味があるはず
コメントには目的を書け!// 取扱う商品種類にコーラを追加するitemType = 1001;
適切なコメントを書くことによって、itemType 変数に 1001 を代入することは、取扱う商品種類にコーラを追加するという意味があることが分かるようになる。
ソースコードだけでは、「コーラ =1001 」だという意味を理解できない。
プログラムの「目的」を書くようにする。
コメントには目的を書け!
public class Example1_2 {
public static void main(String[] args) { //… System.out.println(“ 自動販売機のサービスが開始されました” ); //… int itemType; // 取扱う商品種類にコーラを追加する itemType = 1001; //… System.out.println(itemType+ " は販売中です。 "); }}
改めて、コメントを考えてみよう
目的が書かれたコメント
public class Example1_2 {
public static void main(String[] args) { // 自動販売機の開始を知らせる System.out.println(“ 自動販売機のサービスが開始されました” ); // 取扱う商品種類を保存するための変数 int itemType; // 取扱う商品種類にコーラを追加する itemType = 1001; // 取扱う商品種類を表示する System.out.println(itemType+ " は販売中です。 "); }}
② 目的の階層構造 だいぶ他人にも分かるようになったが、
全体として何をやっているのか分からないpublic class Example1_2 {
public static void main(String[] args) { // 自動販売機の開始を知らせる System.out.println(“ 自動販売機のサービスが開始されました” ); // 取扱う商品種類を保存するための変数 int itemType; // 取扱う商品種類にコーラを追加する itemType = 1001; // 取扱う商品種類を表示する System.out.println(itemType+ " は販売中です。 "); }}
目的の目的を考える // 商品種類を保存するための変数 int itemType;
では、何故保存しておく必要があるのか? その目的は?
取扱う商品種類を提示するため その目的は?
商品を買ってもらうため(自動販売機のプログラムだから)
目的の階層構造 (1) 自動販売機のプログラム(商品を買
う) 取扱う商品種類を提示する
自動販売機の開始したことを知らせる 取扱う商品種類を保存する変数を定義する 取扱う商品種類にコーラを追加する 取扱う商品種類を表示する
をするためには
をするためには
目的の階層構造 (2) 取扱う商品種類を保存する変数を定義する 取扱う商品種類にコーラを追加する
取扱う商品種類を追加する 取り扱う商品種類を保存する変数を定義す
る 取り扱う商品種類にコーラを追加する
取り扱う商品種類を追加するために
変数を定義している
をするためには
目的の階層構造を反映する/*** 自動販売機のプログラム*/public class Example1_2 {
/** * 取扱う商品種類を提示する */ public static void main(String[] args) {
// 自動販売機の開始を知らせる System.out.println(“ 自動販売機のサービスが開始されました” );
// 取り扱う商品種類を追加する int itemType;// 取扱う商品種類を保存するための変数 itemType = 1001;// 取扱う商品種類にコーラを追加する
// 取扱う商品種類を表示する System.out.println(itemType+ “ は販売中です。” );
}}
大目的
中目的
小目的
③ コメントの種類 目的の階層構造が反映されたコメント
を書くための指針 (1) 見出し コメント・ (2) ブロック コメント・ (3) 行 コメント・
(1) 見出し コメント・
/*** 自動販売機のプログラム** 平成 xx 年 xx 月 xx 日 作成者:○○ ××*/public class Example1_2 { …}
プログラムの一番初めに書くコメント Java では、 class 宣言の前に書く
大目的を書く そもそもこのプロ
グラムは何のために書いたのか
日付や、作成者なども入れるとよい
(2) ブロック コメント・ ブロックの最初に書くコメント ブロック全体に対する目的を書く
中目的を書く
/**
* 取扱う商品種類を提示する
*/
public static void main(String[] args) {
// 自動販売機の開始を知らせる
System.out.println(“ 自動販売機のサービスが開始されました” );
}
ブロック(意味のカタマリ)を表現する/*** 自動販売機のプログラム*/public class Example1_2 {
/** * 取扱う商品種類を提示する */ public static void main(String[] args) {
// 自動販売機の開始を知らせる System.out.println(“ 自動販売機のサービスが開始されました” );
// 取り扱う商品種類を追加する int itemType;// 取扱う商品種類を保存するための変数 itemType = 1001;// 取扱う商品種類にコーラを追加する
// 取扱う商品種類を表示する System.out.println(itemType+ “ は販売中です。” );
}}
改行を利用してブロック(意味のカタマリ)
を表現する
(3) 行 コメント・ 行の最後に書くコメント
その行に対して、小目的を書く
int itemType; // 取扱う商品種類を保存するための変数
//取扱う商品種類を追加するitemType01 = 1001;// コーラitemType02 = 1022;// ソーダ
プログラムの後に書く
ブロック コメントとの・連携
練習問題
public class Practice1_1 {public static void main(String args[]){int a = 49;int b = 73;int c = 100;int d = 45;int e = 25;double x = a + b + c + d + e;double y = x / 5.0;y = y * 10;if((y % 10) >= 5){y = y + 10;}int z = (int)(y / 10);System.out.println(z);}}
ソースコードを美しく、他人が読めるようにせよ
解答例 /** 中間テストの成績を計算するプログラム*/public class Practice1_1 {
/** * 5教科の平均を求めるプログラム */ public static void main(String args[]){ // 各教科を保存する変数に、点数を代入する int kokugo = 49; // 国語 int suugaku = 73; // 数学 int rika = 100; // 理科 int syakai = 45; // 社会 int eigo = 25; // 英語
// 5教科の平均を求め、 heikin 変数に保存する double goukei = kokugo + suugaku + rika + syakai + eigo; double heikin = goukei / 5.0;
// 平均を四捨五入し、 answer 変数に保存する heikin = heikin * 10; if((heikin % 10) >= 5){ heikin = heikin + 10; } int answer = (int)(heikin / 10);
// 四捨五入された平均を提示する System.out.println(answer); }}
1.4 たくさんの商品種類を扱う
1.4.1 変数を用意する Java の文法-変数と代入- Java の文法-標準出力-
1.4.2 条件分岐を使う Java の文法-条件分岐-
1.4.3 さまざまな条件式 Java の文法-条件式-
1.4.1 変数を用意する 簡単に10個の変数として扱う方法
// 取扱う商品種類を保存するための変数を定義する int itemType01; int itemType02; int itemType03; int itemType04; int itemType05; …
例題 1-3(Example1_3.java)
初期化する 商品種類が入っていないことを「 -1 」
として表現することにします コメントに意味を書いておかないと、他人
に分からなくなりますよ
// 取扱う商品種類を保存するための変数を初期化する // 入っていないことを -1として表す itemType01 = -1; itemType02 = -1; itemType03 = -1; itemType04 = -1; …
Java の文法①ー変数と代入ー
// 取扱う商品種類を保存するための変数を宣言する int itemType;
// 取扱う商品種類にコーラを追加する itemType = 1001;
変数の宣言
変数への代入
itemType
itemType
1001
Java の文法①-変数と代入ー Java では、宣言と代入を同時にできま
す。
// 取扱う商品種類を保存するための変数を宣言し、コーラを追加する int itemType = 1001;
itemType
1001
Java の文法②ー標準出力ー 文字列を出力するには System.out.printl
n([ 文字列 ])
変数もそのまま出力できますSystem.out.println([ 変数 ])
//自動販売機の開始を知らせる System.out.println(“ 自動販売機のサービスが開始されました” );
// 取扱う商品種類を表示する System.out.println(itemType+ “ は販売中です。” );
文字列とつなげる時は、「 + 」でつ
なげる
文字列リテラルは
「“」「”」で囲む
追加と表示のプログラム // 取扱う商品種類を追加する itemType01 = 1001;// コーラ itemType02 = 1022;// ソーダ itemType03 = 1033;// お茶
// 取扱う商品種類を表示する System.out.println(itemType01+" は販売中です "); System.out.println(itemType02+" は販売中です "); System.out.println(itemType03+" は販売中です "); System.out.println(itemType04+" は販売中です "); System.out.println(itemType05+" は販売中です ");
例題 1-3(Example1_3.java)
例題 1-3 の問題点 このプログラムには問題があります
出力結果を考えてみよう!
1000 番の商品種類は現在取り扱い中です。1001 番の商品種類は現在取り扱い中です。1002 番の商品種類は現在取り扱い中です。-1 番の商品種類は現在取り扱い中です。-1 番の商品種類は現在取り扱い中です。…
出力結果
-1 は表示したくありません。
1.4.2 条件分岐を使う
// 取扱う商品種類を表示する if(itemType01 == -1){// 入ってない // 何もしない }else{// 入っている System.out.println(itemType01+" は販売中です "); }
入っていないときは出力しないように修正
例題 1-4(Example1_4.java)
Java の文法③-条件分岐ー
if(itemType01 == -1){
}else{
}
条件式
成立 (true) のときはここを実行
不成立 (false) のときはここを実行
1.4.3 さまざまな条件式
// 取扱う商品種類を表示する if(itemType01 == -1){// 入ってない // 何もしない }else{// 入っている System.out.println(itemType01+" は販売中です "); }
// 取扱う商品種類を表示する if(itemType01 != -1){// 入っている System.out.println(itemType01+" は販売中です "); }
例題 1-4(Example1_4.java)
例題 1-5(Example1_5.java)
条件式を工夫することによって、より目的に近いプログラムに
Java の文法④ー条件式ー (1)int i=100;if(i == 100)
int i=50;if(i == 100)
true
false
int i=100;if(i != 100)
int i=100;if(i > 100)
int i=100;if(i >= 100)
boolean b=true;if(b == false)
boolean b=true;if(b == true)
boolean b=true;if(b != false)
boolean b=true;if(b)
boolean b=false;if(b)
条件式 (1) 答えint i=100;if(i == 100)
int i=50;if(i == 100)
true
false
falseint i=100;if(i != 100)
int i=100;if(i > 100)
false
int i=100;if(i >= 100)
true
boolean b=true;if(b == false)
true
false
true
true
false
boolean b=true;if(b == true)
boolean b=true;if(b != false)
boolean b=true;if(b)
boolean b=false;if(b)
Java の文法④ー条件式ー (2)boolean b1=true; boolean b2 = false; if(b1 == true && b2 == false)
boolean b1=true; boolean b2 = false; if(b1 == true || b2 == true)
boolean b1=true; boolean b2 = false; if(b1 && b2)
boolean b1=true; boolean b2 = false; if(b1 || b2)
boolean b1=false; boolean b2 = false; if(b1 || b2)
条件式 (2) 答えtrue
true
false
true
false
boolean b1=true; boolean b2 = false; if(b1 == true && b2 == false)
boolean b1=true; boolean b2 = false; if(b1 == true || b2 == true)
boolean b1=true; boolean b2 = false; if(b1 && b2)
boolean b1=true; boolean b2 = false; if(b1 || b2)
boolean b1=false; boolean b2 = false; if(b1 || b2)