乱数表を作成する―Mathクラス―
Mathクラスは、指数関数や対数関数、三角関数、平方根、乱数生成などといった数学演算を実行するための一連のメソッドを提供します。Mathクラスに属するメソッドはすべて静的メソッドであり、使用に際してインスタンス化(オブジェクト生成)を必要としません。
ここでは、このMathクラスのrandomメソッドを利用して、簡易な10×10の乱数表を生成してみることにしましょう。
<%@ 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>
ロジックの概要
ここでは2重のforループを利用して、10×10の表を生成しています。Math#randomメソッドは0.0〜1.0の範囲の乱数を生成しますが、ここでは生成された乱数に100を掛け、roundメソッドで小数点以下を切り捨てることで、0〜100の整数値を取得しています。
もしも0〜1000の範囲の乱数表を生成したいという場合には、1000を掛けてやります。
Mathクラスの主なメソッド
Mathクラスに用意されているメソッドは、もちろん、round、randomメソッドだけではありません。以下では、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) | 度をラジアン値に変換 | 
システム環境変数を取得する―Systemクラス―
パスの区切り文字を想定してみましょう。Windows環境では「\」、UNIX環境では「/」です。
このような環境依存の情報を、ハードコーディングすることは可搬性という観点から好ましくありません。プログラム中に「\」という文字を埋め込んでしまった時点で、そのコードはWindows専用のコードとなってしまうのです。UNIX環境で同じコードを動かそうとした場合にも、いちいち「/」に置き換え(場合によっては再コンパイル)が必要です。
このような環境依存情報を、JSP(Java)ではシステムプロパティを介して取得することができます。システムプロパティから環境依存情報を動的に取得することで、より再利用性の高いコードを記述することができます。
ここでは、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>
ロジックの概要
あらかじめ取得した主なシステムプロパティの名前を、文字列配列aryNamにセットしておきます。あとはforループで順番に配列の中身を取り出していくだけです。システムプロパティへのアクセスは、System#getPropertyメソッドから行うことができます。
主なシステムプロパティ
以下に、System#getPropertyメソッドで取得することができる主なシステムプロパティとその概要を挙げておくことにします。
| プロパティ名 | 概要 | 
|---|---|
| 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 | ユーザーのホームディレクトリ | 
今回はここまでです。次回は、バイリンガルサイトを構築するためのResourceBundleクラス、正規表現検索を可能とするPattern/Matcherクラスなどについてご紹介することにしましょう。
Copyright © ITmedia, Inc. All Rights Reserved.

