Thinkers'Studio
JavaとC言語の自習ツール
BMI指数を求めるサンプル (Java版)
 今回は、身長と体重を入力して、BMI指数を求めるプログラムのサンプルです。

BMI指数を求めるプログラムの処理手順

  • 身長(cm) を入力する
  • 体重(kg) を入力する
  • 身長を cm から m単位にする
  • bmi を 体重 / (身長 * 身長) で計算し、表示する
  • bmi の値を判定して評価を表示する
BMI指数を求めるプログラム例 】
import java.io.*;

public class BmiValue {
    public static void main( String[] args ) {
        double h, w, bmi;

        try {
            BufferedReader br
            = new BufferedReader( new InputStreamReader(System.in) );

            System.out.println( "BMI指数の判定プログラムです" );
            System.out.print( "身長(cm) を指定してください: " );
            h = Double.parseDouble( br.readLine() );
            System.out.print( "体重(kg) を指定してください: " );
            w = Double.parseDouble( br.readLine() );

            h *= 0.01;  // cm --> m
            bmi = w / (h*h);

            System.out.println( "BMI指数は " + Math.round( bmi*10.0 )/10.0 );
            System.out.print( "評価は" );
            if( bmi < 18.5 )      System.out.println( "やせ型です" );
            else if( bmi < 25.0 ) System.out.println( "標準です" );
            else                  System.out.println( "肥満です" );
            br.close();
        } catch( Exception e ) {
            System.out.println( "例外が発生しました: " + e );
        }
    }
}

BMI指数を求めるプログラムの処理内容

 キーボードからの入力は、BufferedReader クラスを使っています。
 readLineメソッドは String型を返すので、ParseDoubleメソッドで double型に変換しています。
 BMIの計算式では身長は m単位です。指定は日頃使い慣れている cm単位とし、あとで m単位にして計算しました。
 BMI指数の表示は小数点以下第2位を四捨五入です。round は整数に丸めるので、10.0 を掛けたものを round し、10.0 で割って元の桁に戻しています。

(今回のクイズです)
 上のプログラムの例外処理は、すべての例外をキャッチする書き方としています。
 どんな入力のどんな例外が考えられるでしょうか?
   (答えは、次回の Java の Tips で ・・・)

前回のクイズの答え: (前回の問題を見る
<メソッド> 引数が3次元の配列となり、処理は for の 3重ループとなります。
static int notReservedCnt( int[][][] seats ) {
    int cnt = 0;

    for( int i = 0; i < seats.length; i++ ) {
        for( int j = 0; j < seats[i].length; j++ ) {
            for( int k = 0; k < seats[i][j].length; k++ )
                if( seats[i][j][k] == 0 ) cnt++;
        }
    }
    return cnt;
}
<seats配列の初期化例>
int[][][]   seats =
   { { { 1,0,0,1 }, { 0,0,0,1 }, { 1,0,0,0 }, { 1,1,0,1 }
     , { 1,0,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 0,1,1,1 }
     , { 0,1,1,1 }, { 1,1,1,1 }, { 1,1,0,1 }, { 1,1,0,0 }
     , { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 0,0,0,1 } }
   , { { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }
     , { 1,0,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }
     , { 0,1,1,1 }, { 1,1,1,1 }, { 1,1,0,1 }, { 1,1,1,1 }
     , { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 }, { 1,1,1,1 } }
  };