Java for文の練習 色見本表

『デスペレーション 上・下(著:スティーブン・キング)』読み終わったけど、微妙な感じ、映画化もされてるそうな。『いのちなりけり(著:葉室麟)』もちょっと微妙、好きな作家さんの作品だけにちょいとショック。

そんなこんなで、Javajspでfor文の練習しました。 

Eclipseで、前回作ったjspSampleプロジェクトのWebContentフォルダにjspファイルを新規で作ります。

f:id:ts0818:20170728185954j:plain

「Web」>「JSP ファイル」を選択し、「次へ(N)>」をクリック。

f:id:ts0818:20170728185940j:plain

「ファイル名(M):」を入力し、 「次へ(N)>」をクリック。

f:id:ts0818:20170728185955j:plain

「完了(F)」をクリック。

f:id:ts0818:20170728185956j:plain

 jspファイルが作成されます。

f:id:ts0818:20170728185957j:plain

作成された jspファイルを編集。

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
td {
  font-family: "";
  padding: 4px 8px;
}
</style>
</head>
<body>
<table border="1">
<%
// 0x33(16進数)
// 51(10進数)
// R
for(int r = 0; r <= 256; r += 0x33) {
  // G
  for(int g = 0; g <=256; g += 0x33) {
%>
  <tr>
<%
    // B
    for(int b = 0; b <= 256; b += 0x33) {
      String r_str = Integer.toHexString(r);
      String g_str = Integer.toHexString(g);
      String b_str = Integer.toHexString(b);

      // 3項演算子で記述できる
      // 変数 = (条件)? 成り立つとき : 成り立たないとき;
      // 3項演算子で処理した後に、変数を足すこともできる
      // 変数 = ((条件)? 成り立つとき : 成り立たないとき) + 変数;
      r_str = ((r_str.length() == 1)? "0" : "") + r_str;
      g_str = ((g_str.length() == 1)? "0" : "") + g_str;
      b_str = ((b_str.length() == 1)? "0" : "") + b_str;

      out.print("<td><span><span style='color: #" + (r_str  + g_str  +  b_str) + "'>■ </span>" + r_str  + g_str  +  b_str + " </span></td>");
    }
    out.println();
  }
%>
  </tr>
<%

}
%>
</table>
</body>
</html>

赤色(RGBのうちのR)を例にとりますが、

  String r_str = Integer.toHexString(r);
  r_str = ((r_str.length() == 1)? "0" : "") + r_str; 

の部分は、

  String R = ((r < 16) ? "0" : "") + Integer.toHexString(r);   

のように、数値(整数)を比較条件にしたほうが良さそうです。

サーバーで実行。f:id:ts0818:20170714224011j:plain の▼をクリックし、「実行(R)」>「1 サーバーで実行」をクリック。

f:id:ts0818:20170728185950j:plain

「次へ(N)>」をクリック。 

f:id:ts0818:20170728185951j:plain

「構成済み(C):」にプロジェクトが追加されていればOK。「完了(F)」をクリック。 

f:id:ts0818:20170728185952j:plain

サーバーが起動されます。

f:id:ts0818:20170728185948j:plain

http://localhost:8080/プロジェクト名/jspファイル名』で表示されればOK。 

f:id:ts0818:20170728185953j:plain

for文の入れ子(ネスト)は、3重ぐらいまでにしたほうが良いようです。 配列を使ってもできるようですが、大量のデータを扱う場合は、最初のInteger.toHexString()を使っていくほうが、メモリ的にも良いようです。その場の状況によって使い分けが必要になってくるようです。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<%
//
String[] rgb = {"00","33","66","99","cc","FF"};

for(int r = 0; r < rgb.length; r++) {
  for(int g = 0; g < rgb.length; g++) {
%>
  <tr>
<%
    for(int b = 0; b < rgb.length; b++) {
      out.print("<td><span style='color: #" + (rgb[r] + rgb[g] + rgb[b]) + "'>■</span>" + rgb[r] + rgb[g] + rgb[b] + "</td>");
    }
%>
  </tr>
<%

  }
}
%>
</table>
</body>
</html>