第1回 プログラムの基本 他人が読めるプログラムを書く
学習目標 Javaプログラムを書き、動かせる 他人が読めるプログラムが書ける 基本的なJava文法を説明できる コンパイルし、実行できる インデントをつけることができる 適切な名前をつけることができる 適切なコメントをつけることができる 基本的なJava文法を説明できる 変数と代入について説明できる 出力する方法について説明できる 条件分岐のしくみを説明できる
1.1 Javaプログラム を動かしてみましょう 1.1.1 基本的な流れ 1.1.2 実際に書いてみましょう ①JDKのインストール ②エディタを開く ③ソースコードを書く ④保存する ⑤コンパイルする ⑥実行する
1.1.1 基本的な流れ コンパイル 実行 ソースコード バイトコード 人間が書く プログラム(Java) コンピュータが 実行できる命令
1.1.2 実際に書いてみましょう ①JDKのインストール テキストを参照 ②エディタを開く
③ソースコードを書く Example1_1.java 同じ名前にすること ファイル名の拡張子は.java 例題1-1 (Example1_1.java) public class Example1_1 { public static void main(String[] args) { System.out.println("自動販売機のサービスが開始されました"); } 同じ名前にすること Example1_1.java ファイル名の拡張子は.java
classって何? クラスとは?(第4回から詳しくやります) Javaにおけるプログラムの単位 ファイル名とクラス名は同じにします。 クラス クラス クラス クラス プログラム プログラム
mainって何? main()メソッドは、Javaのプログラムのスタート地点です。各プログラムに必ず一つ必要です。 main クラス クラス
④保存する 場所に注意してください(整理しないと後でわからなくなります) objprogフォルダ(ディレクトリ)を作成します。 Example1_1.java objprog02 …
⑤コンパイルする objprog01ディレクトリ に移動します。 コンパイルコマンド 「javac Example1_1.java」 を実行します。 Example1_1.class ファイルができれば成功。 objprog01 Example1_1.class Example1_1.java
⑥実行する 実行コマンド 「java Example1_1」 を実行します。 「自動販売機のサービスが開始されました」メッセージが表示されれば実行完了!
1.2 自動販売機プログラミング 1.2.1 買うことのできる商品を提示する ①商品と種類 ②商品種類を番号で扱う
1.2.1 買うことの できる商品を提示する 商品のリストを提示するプログラム 商品を売るためには、取り扱う商品を提示する必要がある
①商品と種類 利用者が商品を選ぶときは、商品そのもので選ぶわけではなく、種類で選びます コーラ コーラB コーラA コーラC コーラ コーラCを選ぶわけではない。コーラならどれでも良い
「商品」と「商品種類」 本講座では、実際の商品のことを「商品」、種類のことを「商品種類」と呼びます 商品 商品種類
「商品種類」の表示を行う 買える商品を提示するプログラム =商品種類のリストを提示するプログラム しばらくはCUIで考えます。 「コーラ」は販売中です。 「ソーダ」は販売中です。 「緑茶」は販売中です。 GUI CUI
②商品種類を番号で扱う 簡単にするために、しばらく商品種類は番号だけで扱うことにします 1001 1003 1001番は販売中です。 1002番は販売中です。 1004番は販売中です。 1002 1004
1.3 他人が 読めるプログラムを書く 1.3.1 人が読めるプログラムとは? 1.3.2 コメントの書法 ①インデントが付けられている ②変数に適切な名前が付けられている ③コメントがかかれている 1.3.2 コメントの書法 ①コメントとプログラムの目的 ②目的の階層構造 ③コメントの種類
1.3.1 他人が読める プログラムとは? 他人が読めないプログラム public class Example1_2 { 例題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+ "は販売中です。"); }
①インデントを付ける public class Example1_2 { 例題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) ブロック プログラム中で{}で囲まれた部分をブロックといいます public static void main{ … インデント(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 { 例題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+ “は販売中です。”); }
③コメントが書かれている コンテクストが分からない他人が読めるようにする //取り扱う商品種類を提示するプログラム 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を代入していることは、プログラムを見れば明らか これでは、何故この人は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)見出し・コメント プログラムの一番初めに書くコメント 大目的を書く 日付や、作成者 なども入れるとよい Javaでは、class宣言の前に書く 大目的を書く そもそもこのプロ グラムは何のため に書いたのか 日付や、作成者 なども入れるとよい /** * 自動販売機のプログラム * * 平成xx年xx月xx日 作成者:○○ ×× */ public class Example1_2 { … }
(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 変数を用意する 1.4.2 条件分岐を使う 1.4.3 さまざまな条件式 Javaの文法-変数と代入- Javaの文法-標準出力- 1.4.2 条件分岐を使う Javaの文法-条件分岐- 1.4.3 さまざまな条件式 Javaの文法-条件式-
1.4.1 変数を用意する 簡単に10個の変数として扱う方法 //取扱う商品種類を保存するための変数を定義する 例題1-3 (Example1_3.java) //取扱う商品種類を保存するための変数を定義する int itemType01; int itemType02; int itemType03; int itemType04; int itemType05; …
初期化する 商品種類が入っていないことを「-1」として表現することにします コメントに意味を書いておかないと、他人に分からなくなりますよ //取扱う商品種類を保存するための変数を初期化する //入っていないことを-1として表す itemType01 = -1; itemType02 = -1; itemType03 = -1; itemType04 = -1; …
Javaの文法①ー変数と代入ー 変数の宣言 itemType 変数への代入 1001 itemType //取扱う商品種類を保存するための変数を宣言する int itemType; 変数への代入 1001 //取扱う商品種類にコーラを追加する itemType = 1001; itemType
Javaの文法①-変数と代入ー Javaでは、宣言と代入を同時にできます。 1001 itemType //取扱う商品種類を保存するための変数を宣言し、コーラを追加する int itemType = 1001; 1001 itemType
Javaの文法②ー標準出力ー 文字列を出力するにはSystem.out.println([文字列]) 文字列リテラルは 「“」「”」で囲む //自動販売機の開始を知らせる System.out.println(“自動販売機のサービスが開始されました”); 変数もそのまま出力できます System.out.println([変数]) 文字列とつなげる時は、「+」でつなげる //取扱う商品種類を表示する System.out.println(itemType+ “は販売中です。”);
追加と表示のプログラム //取扱う商品種類を追加する itemType01 = 1001;//コーラ //取扱う商品種類を表示する 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.4.2 条件分岐を使う 入っていないときは出力しないように修正 //取扱う商品種類を表示する 例題1-4 (Example1_4.java) //取扱う商品種類を表示する if(itemType01 == -1){//入ってない //何もしない }else{//入っている System.out.println(itemType01+"は販売中です"); }
Javaの文法③-条件分岐ー 条件式 if(itemType01 == -1){ }else{ 成立(true)のときはここを実行 } 不成立(false)のときはここを実行
1.4.3 さまざまな条件式 条件式を工夫することによって、 より目的に近いプログラムに //取扱う商品種類を表示する if(itemType01 == -1){//入ってない //何もしない }else{//入っている System.out.println(itemType01+"は販売中です"); } 例題1-4 (Example1_4.java) 例題1-5 (Example1_5.java) //取扱う商品種類を表示する if(itemType01 != -1){//入っている System.out.println(itemType01+"は販売中です"); }
Javaの文法④ー条件式ー(1) int i=100; if(i == 100) true boolean b=true; if(b == true) int i=50; if(i == 100) false boolean b=true; if(b == false) int i=100; if(i != 100) boolean b=true; if(b != false) int i=100; if(i > 100) boolean b=true; if(b) int i=100; if(i >= 100) boolean b=false; if(b)
条件式(1)答え int i=100; if(i == 100) true boolean b=true; if(b == true) false boolean b=true; if(b == false) false int i=100; if(i != 100) false boolean b=true; if(b != false) true int i=100; if(i > 100) false boolean b=true; if(b) true int i=100; if(i >= 100) true boolean b=false; if(b) false
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)答え boolean b1=true; boolean b2 = false; if(b1 == true && b2 == false) true boolean b1=true; boolean b2 = false; if(b1 == true || b2 == true) true boolean b1=true; boolean b2 = false; if(b1 && b2) false boolean b1=true; boolean b2 = false; if(b1 || b2) true boolean b1=false; boolean b2 = false; if(b1 || b2) false