コンピュータプログラミングII (7)

中間考査と演習

このスライドの使い方

テキスト等がはみ出した場合は、フォントサイズを小さくして調整する。 「S」 キーで小さく、「B」 キーで大きくなる。また、 下記のキーボード操作が使用できる。(一部キー操作は IE のみ対応)

「←」 or 「Page Up」 前のスライドに戻る
「→」 or 「Page Down」 or「スペース」 次のスライドに進む
「Home」 and 「End」 先頭(Home)または最後(End)のスライドへ移動
「C」 or 「contents?」 をクリック スライド一覧の表示
「F11」 or 「Ctrl+Shift+F (Win)」, 「Cmd+Shift+F (Mac)」 フルスクリーン表示と通常表示の切り替え
「F」 フッタの表示と非表示の切り替え
「A」 全スライド表示に切替 (印刷時に使う)
「S」「-」/「B」「+」 フォントサイズの大(B) 小(S)

本日のゴール

お知らせ: 中間考査

復習: 変数の型

基本型
  • 整数: int, long, short, ...
  • 実数: float, double
  • 真偽値: boolean
参照型
  • 配列: int[], float[], ...

基本型 boolean

boolean型 (論理型)
真偽値を表す型。true(真)、false(偽)、の2値のどちらかの値を持つ。
boolean isNormal = false;     // true, false は boolean 型の定数
boolean isOtaku = true;

boolean xGTy = x > y;                          // 論理演算の結果は boolean型の値

if, while, for などの条件式で、論理演算子とともによく使われる。

if(isOtaku) {           // isOtaku の値が true なら条件を満たす
  println("君とは友だちになれそうだ");   // テキストエリアに引数の文字列と改行を表示
}

関数 println は引数の文字列と改行を表示。 関数 print は改行しない。

基本型 boolean : システム変数

前後期「コンピュータプログラミングI」第3回の例

if (mousePressed) {
  マウスのボタンが押されているときの処理
}
else {
  マウスのボタンが押されていないときの処理
}

基本型 boolean : 引数・戻り値

もちろん、メソッド/関数の引数や戻り値の型にも使える。

boolean isEven(int i) {    // 引数で受け取った値が偶数だったら true を返す
  boolean result;
  if(i % 2 == 0) {
    result = true;
  }
  else {
    result = false;
  }
  return result;
}

result の値は if の条件式 i % 2 == 0 の真偽値と一致するので、次のように書ける。

boolean isEven(int i) {    // 引数で受け取った値が偶数だったら true を返す
  boolean result;
  result = (i % 2 == 0);
  return result;
}

if で判定していた条件式を return 文に書き、その値を返してもよい。

boolean isEven(int i) {    // 引数で受け取った値が偶数だったら true を返す
  return i % 2 == 0;
}

例: boolean型の値を返す関数

/**
 *  点1(x1, y1)、点2(x2, y2) の距離が distance より近いかを調べる
 *  @param x1 点1のx座標
 *  @param y1 点1のy座標
 *  @param x2 点2のx座標
 *  @param y2 点2のy座標
 *  @return 点1(x1, y1)、点2(x2, y2) の距離が distance より近いか否か
 */
boolean isNeighbor(float x1, float y1, float x2, float y2, float distance) {
  float dx = x1 - x2;
  float dy = y1 - y2;
  return dx * dx + dy * dy <= distance * distance;
}


// 使い方

if(isNeighbor(x1, y1, x2, y2, r)) {

  // 距離が r 以下だった場合の処理

}

フラグとしての利用

boolean 型の変数は、状態を記憶しておくフラグ(flag; 旗)として利用されることが多い。

配列 a の全要素を順に表示しつつ、閾値 th よりも大きな値の要素があるかチェック。

boolean found = false;     // 初期値は旗が立っていない状態

for(int i = 0; i < a.length; i++) {
  println(a[i]);
  if(a[i] > th) {
    found = true;          // th より大きい値が見つかったので旗を立てておく
  }    
}

if(found) {                // 旗が立っているかチェック
  println("閾値より大きい要素がありました。");
}