プログラミング基礎I(再) 山元進.

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

プログラミング第5回 1 while ループ 文字列の操作
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
ゴールデンウィークの課題 (提出日:2009/05/12) 2009/05/12に小テストがあります!
情報処理演習 (秋学期・樋口担当) 2回目 10/1 日本工業大学 コンピュータリテラシーII.
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
4章 制御の流れ-3.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
IO - 入出力 小西 亨.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
情報処理Ⅱ 第4回 2007年10月29日(月).
情報工学演習Ⅰ Java入門の入門 104 slides.
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
JAVA入門② 変数と型 式と演算子 制御文.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
プログラミング言語入門 手続き型言語としてのJava
プログラムの制御構造 選択・繰り返し.
JAVA入門.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
暗号技術 ~JAVAプログラム③~ (7週目)
アルゴリズムとプログラミング (Algorithms and Programming)
暗号技術 ~JAVAプログラム①~ (5週目)
第1回 プログラムの基本 他人が読めるプログラムを書く.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
高度プログラミング演習 (05).
高度プログラミング演習 (05).
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
ソフトウェア制作論 平成30年11月21日.
プログラミングⅠ 平成31年1月7日 森田 彦.
オブジェクト プログラミング 第2回 プログラムの基本.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
基礎プログラミング演習 第6回.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第3回 2007年10月22日(月).
プログラミングⅡ 第2回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
暗号技術 ~JAVAプログラム②~ (6週目)
ウェブデザイン演習 第6回.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
C#プログラミング実習 第2回.
C言語講座 制御(選択) 2006年 計算技術研究会.
情報処理Ⅱ 2005年10月28日(金).
JAVA入門⑥ クラスとインスタンス.
プログラミング入門 第4回講義 選択(分岐) - if, switch/case - データ構造とアルゴリズム(2)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング 平成28年10月25日 森田 彦.
プログラミング1 プログラミング演習I 第2回.
情報処理Ⅱ 小テスト 2005年2月1日(火).
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
C言語講座 四則演算  if ,  switch 制御文.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
情報処理技法(Javaプログラミング)1 第8回 同じ処理を何回も繰り返すには?
Presentation transcript:

プログラミング基礎I(再) 山元進

Lesson 5 場合に応じた処理 条件演算子 if ( … ) { … } else { … } switch ( … ) { case … } ( … ) には条件を記述する式が入る

Java で扱う条件式 条件 とは 真/偽 が判定できるようなもの 条件の記述 条件 とは 真/偽 が判定できるようなもの 条件の記述 日常会話では 「英語の試験は良い成績だった」というような、あいまいな条件がありうる コンピュータはあいまいな判定条件をどうにか処理できるほど気が利かないので、確定的な条件を与える。 英語の点数を表す変数を a として a >= 80 a < 80

条件を記述する コンパイル時に判定できるような条件 他にも真/偽を判定するような演算子 (関係演算子) が色々ある cf. 表5-1 3 > 1 いつでも真な条件式 3 < 1 いつでも偽な条件式 他にも真/偽を判定するような演算子 (関係演算子) が色々ある cf. 表5-1

関係演算子を使う 5 > 3 評価すると true (真) 3 > 5 評価すると false(偽) a == 6 変数 a の値によって評価変わる a の値が 6 のときは true a の値が 6 ではない時は false a != 6 上の例と反対の関係 a の値が 6 のときは false a の値が 6 ではない時は true == と = (代入演算子) を混同するな

if 文 まず、もっとも簡単な構文から if ( 条件 ) { 条件成立時の処理 … } 注意: 条件成立時の処理が 1 文のときは {} で括る必要がない。しかし、ついていても構わないので、いつでも {} をつけておいた方が良い

Sample1.java (改) import java.io.*; class Sample1 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if (res == 1) {// 必ず {} でくくることを推奨 System.out.println("1が入力されました。"); } // 1 が入力されたとき上の行が実行される System.out.println("処理を終了します。"); }

Sample2.java import java.io.*; // 条件成立時に、複数の処理を行う class Sample2 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if (res == 1) {// 入力が 1 のとき、以下の複数の処理をする System.out.println("1が入力されました。"); System.out.println("1が選択されました。"); } System.out.println("処理を終了します。");

Sample2.java (正しくない例) import java.io.*; // 条件成立時に、複数の処理を行う class Sample2 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if (res == 1) // {} を外しても文法上は正しい。 System.out.println("1が入力されました。"); System.out.println("1が選択されました。"); // 入力が 1 でなくても"1が選択されました。"と出力される → バグ System.out.println("処理を終了します。"); } } // バグとは、プログラムの誤りのこと。

Sample2.java (正しくない例) の問題点 if(res == 1) System.out.println("1が入力されました。"); System.out.println("1が選択されました。"); 字下げ(インデンテーション)が正しくないので、プログラムのバグが見つけにくい 条件成立時に実行される文だけ字下げすべき

Sample3.java import java.io.*; //条件不成立のときの処理を指定する class Sample3 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if (res == 1) { System.out.println("1が入力されました。"); } else { System.out.println("1以外が入力されました。 "); }

Sample4.java import java.io.*; // 条件の判断を複数行う class Sample4 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if (res == 1) { System.out.println("1が入力されました。"); } else if (res == 2) { System.out.println("2が入力されました。 "); } else { System.out.println("1か2を入力してください。"); }

Sample5.java import java.io.*; // 条件の判断を複数行う switch 文 class Sample5 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); switch (res) { case 1: System.out.println("1が入力されました。"); break; // この break; がないと、次の処理が継続して行われる case 2: System.out.println("2が入力されました。 "); break; // break; は switch 文を抜ける、という意味 default: // 今までの case に当てはまらない場合 System.out.println("1か2を入力してください。"); break; // この break は必要ない。 入れると style が統一されて良い。 }

Sample6.java import java.io.*; // 入力文字によって場合分けする class Sample6 { public static void main(String[] args) throws IOException System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); // 先頭の char を取り出すメソッド switch (res) { // () 内の式の値として String 型は許されない。 case 'a': // switch ( … ) の()内の値に対応して char 型のリテラル System.out.println("aが入力されました。"); break; case 'b': System.out.println("bが入力されました。 "); default: System.out.println("aかbを入力してください。"); break; // 最後なので、この break はなくても同じ動作をする。 }

論理演算子 A && B A || B ! A 論理演算子により複雑な条件を表現可能 数学でいうところの A かつ B に対応する A, B がともに true のとき true それ以外の場合 false A || B 数学でいうところの A または B に対応する A か B のどちらかが true のとき true どちらも false の場合 false ! A 数学でいうところの A の否定に対応する。単項演算子 A が false のとき true A が true のとき false 論理演算子により複雑な条件を表現可能 時間があり、かつ、金があれば …

Sample7.java import java.io.*; class Sample7 { public static void main(String[] args) throws IOException System.out.println("あなたは男性ですか?"); System.out.println("YまたはNを入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); if(res == 'Y' || res == 'y') { System.out.println("あなたは男性ですね。"); } else if(res == 'N' || res == 'n') { System.out.println("あなたは女性ですね。"); } else { }

条件演算子 3項演算子(オペランドが3つ) A ? B : C 条件式 A が true なら B, false なら C が値となる 例 (res == 1) ? 'A' : 'B' res の値が 1 なら char 型の 'A' が値となる。それ以外の場合 'B' が値。

Sample9.java import java.io.*; class Sample9 { public static void main(String[] args) throws IOException System.out.println("何番目のコースにしますか?"); System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); char ans = (res==1) ? 'A' : 'B' ; System.out.println(ans + "コースを選択しました。"); }

Sample9.java の説明 char ans = (res==1) ? 'A' : 'B' ; の部分は char ans; if(res==1){ ans = 'A'; } else { ans = 'B'; } とおなじこと。 条件演算子だと、6 行が 1 行で書けて便利。 (テキストの Sample8.java だと、 {} を省いてあるので 5 行になっている。)

Lesson 5 のまとめ 関係演算子を使って条件を作成できる if文を使って条件に応じた処理を行うことができる switch文を使って式の値に応じた処理を行うことができる 論理演算子を使って複雑な条件を作成できる 条件演算子?:を使って条件に応じた処理を簡単に記述できる

演習問題 整数を入力し、それが10未満であれば「入力された数は10未満の整数です。」と出力するプログラムを作成せよ。 整数を入力し、それが10未満であれば「入力された数は10未満の整数です。」と、10以上であれば「入力された数は10以上の整数です。」と出力するプログラムを作成せよ。 整数を入力し、それが0~9の範囲であれば「入力された数は1ケタの整数です。」と、10~99の範囲であれば「入力された数は2ケタの整数です。」と、100以上であれば「入力された数は3ケタ以上の整数です。」と出力するプログラムを、if 文とelse文を組み合わせて作成せよ。ただし、入力された整数が負の場合は、それ以上なにも出力せずに終了することとする。

演習問題 整数を入力し、それが0~9の範囲であれば「入力された数は0以上9以下の整数です。」と、10~19の範囲であれば「入力された数は10以上19以下の整数です。」と、20以上であれば「入力された数は20以上の整数です。」と出力するプログラムをswitch文を用いて作成せよ。3.同様、入力された整数が負ならば、それ以上なにも出力しないで終了することとする。 → 提出するのはReport4.javaのみ a=13の時,次の条件がtrueであるかfalseであるか答えよ。(TAのチェックを受けること) a>10 && a%2==1 a<10 || a%2==0 !(a==13)