検索
連載

クラスライブラリを攻略「基本クラス編」基礎から学ぶサーブレット/JSP(7)(3/3 ページ)

Share
Tweet
LINE
Hatena
前のページへ |       

乱数表を作成する―Mathクラス―

 Mathクラスは、指数関数や対数関数、三角関数、平方根、乱数生成などといった数学演算を実行するための一連のメソッドを提供します。Mathクラスに属するメソッドはすべて静的メソッドであり、使用に際してインスタンス化(オブジェクト生成)を必要としません。

 ここでは、このMathクラスのrandomメソッドを利用して、簡易な10×10の乱数表を生成してみることにしましょう。

リスト5 random.jsp
<%@ page contentType="text/html;charset=Shift_JIS" %>
<table border="1">
<%
for(int i=0;i<10;i++){
  out.print("<tr>");
  for(int j=0;j<10;j++){
    out.print("<td>" + Math.round(Math.random()*100) + "</td>");
  }
  out.print("</tr>");
}
%>
</table>
画面4 10×10のテーブルに0?100の範囲の乱数表が生成されます。実行ごとにセットされる値は変化します
画面4 10×10のテーブルに0?100の範囲の乱数表が生成されます。実行ごとにセットされる値は変化します

ロジックの概要

 ここでは2重のforループを利用して、10×10の表を生成しています。Math#randomメソッドは0.0〜1.0の範囲の乱数を生成しますが、ここでは生成された乱数に100を掛け、roundメソッドで小数点以下を切り捨てることで、0〜100の整数値を取得しています。

 もしも0〜1000の範囲の乱数表を生成したいという場合には、1000を掛けてやります。

Mathクラスの主なメソッド

 Mathクラスに用意されているメソッドは、もちろん、round、randomメソッドだけではありません。以下では、Mathクラスでよく使用する主なメソッドについて、一覧に挙げておくことにしましょう。

表5 Mathクラスの主要なメソッド
メソッド 概要
abs(double a) 絶対値
acos(double a) 指定角度のアークコサイン
asin(double a) 指定角度のアークサイン
atan(double a) 指定角度のアークタンジェント
ceil(double a) 小数値の切り上げ
cos(double a) 指定角度のコサイン
floor(double a) 小数値の切り捨て
log(double a) 自然対数(底はe)
max(double a, double b) 引数のうち大きい方を返す
min(double a, double b) 引数のうち小さい方を返す
pow(double a, double b) aのb乗
sin(double a) 指定角度のサイン
sqrt(double a) aの平方根
tan(double a) 指定角度のタンジェント
toDegrees(double angrad) ラジアン値を度に変換
toRadians(double angdeg) 度をラジアン値に変換

Mathクラスはさまざまな数値演算の手段を提供します。Mathクラスに属するメソッドはすべて静的メソッドですので、オブジェクトを生成することなく直接にメソッドを呼び出すことが可能です。


システム環境変数を取得する―Systemクラス―

 パスの区切り文字を想定してみましょう。Windows環境では「\」、UNIX環境では「/」です。

 このような環境依存の情報を、ハードコーディングすることは可搬性という観点から好ましくありません。プログラム中に「\」という文字を埋め込んでしまった時点で、そのコードはWindows専用のコードとなってしまうのです。UNIX環境で同じコードを動かそうとした場合にも、いちいち「/」に置き換え(場合によっては再コンパイル)が必要です。

 このような環境依存情報を、JSP(Java)ではシステムプロパティを介して取得することができます。システムプロパティから環境依存情報を動的に取得することで、より再利用性の高いコードを記述することができます。

 ここでは、JSPで扱うことのできる主なシステムプロパティを動的に一覧表示してみることにしましょう。

リスト6 property.jsp
<%@ page contentType="text/html;charset=Shift_JIS" %>
<table border="1">
<tr>
  <th>プロパティ名</th><th>値</th>
</tr>
<%
String[] aryNam={"application.home","file.separator","java.ext.dirs",
"java.home","java.io.tmpdir","java.library.path",
"java.runtime.version","java.specification.name","java.version",
"java.vm.name","line.separator","os.name","os.version",
"path.separator","user.country","user.dir","user.home"};
for(int i=0;i<aryNam.length;i++){
%>
  <tr>
    <td><%=aryNam[i]%></td>
    <td><%=System.getProperty(aryNam[i])%></td>
  </tr>
<%
}
%>
</table>
画面5 システムプロパティの一覧を表示
画面5 システムプロパティの一覧を表示

ロジックの概要

 あらかじめ取得した主なシステムプロパティの名前を、文字列配列aryNamにセットしておきます。あとはforループで順番に配列の中身を取り出していくだけです。システムプロパティへのアクセスは、System#getPropertyメソッドから行うことができます。

主なシステムプロパティ

 以下に、System#getPropertyメソッドで取得することができる主なシステムプロパティとその概要を挙げておくことにします。

表6 主なシステムプロパティ
プロパティ名 概要
application.home アプリケーションのホームディレクトリ
file.separator ファイルパスの区切り文字(Windows版では「\」、UNIX版では「/」)
java.ext.dirs 拡張ディレクトリへのパス
java.home Javaのホームディレクトリ
java.io.tmpdir 一時ディレクトリ
java.library.path クラスライブラリのパス
java.runtime.version ランタイムのバージョン
java.specification.name Java仕様の名前
java.version Javaのバージョン
java.vm.name Java仮想マシン名
line.separator 改行文字(Windowsでは「\r\n」、UNIX版では「\n」)
os.name OSの名前
os.version OSのバージョン
path.separato パス連結の区切り文字(Windowsでは「;」、UNIXでは「:」)
user.country ユーザーの国コード
user.dir ユーザーディレクトリ
user.home ユーザーのホームディレクトリ

getPropertyメソッドはシステムプロパティを取得します。システムプロパティを介することで環境依存要素をハードコーディングする必要がなくなり、より可搬性に富んだコードを記述することができます。


 今回はここまでです。次回は、バイリンガルサイトを構築するためのResourceBundleクラス、正規表現検索を可能とするPattern/Matcherクラスなどについてご紹介することにしましょう。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る