こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

問は解けたのですが、疑問が残ります

JSPで月曜日から日曜日までを縦に並べて書くソースコードなのですが、
問題は土曜日を青い字に日曜日を赤い字に塗り替えなくてはならないというところです。
まずは、自分が書いたソースを貼り付けます。
<%@ page language="java" contentType="text/html; charset=Shift_JIS"
pageEncoding="windows-31j"%>
<%! String strYoubi[] = {"月","火","水","木","金","土","日"}; %>

<!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=Shift_JIS">
<title>one week</title>
</head>
<body>
<%
for (int i=0; i<strYoubi.length; i++) {
out.print(strYoubi[i] + "曜日" + "<br>");
switch(i) {
case 4:
%>
<font color="blue"/>
<%break;
case 5:
%>
<font color="red"/>
<%break;
}
}
%>
</body>
</html>

これで何故4番目をしているのに5番目の土曜日が青になるのか、同じく日曜日も赤くなるのかが謎です。

解答は物凄く簡単なものでした。

<%@ page contentType="text/html;charset=Shift_JIS" %>
<%!
String strYoubi[]={"月","火","水","木","金","土","日"};
%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>sample2</title>
</head>
<body bgcolor="#FFFFFF">
<%
for(int i=0;i<strYoubi.length;i++){
if (strYoubi[i]=="土"){
out.print("<font color=BLUE>" + strYoubi[i]+"曜日"+"<br></font>");
}else if(strYoubi[i]=="日"){
out.print("<font color=RED>" + strYoubi[i]+"曜日"+"<br></font>");
}else{
out.print(strYoubi[i]+"曜日"+"<br>");
}

}
%>
</body>
</html>

何でこんな簡単なソースもかけないのか自分に苛立ちを感じます。
発想の問題でしょうか。もっと柔軟性が必要なのですかね。
できれば、アドバイスや注意点などを列挙して頂けると、大変有り難いのですが。
どうぞ宜しくお願い致します。

投稿日時 - 2009-03-03 20:15:01

QNo.4765615

困ってます

質問者が選んだベストアンサー

>それが書けない自分は救いようの無いバカなのでしょうか。
情けなさ過ぎます。自分に憤激を感じます。でも、救われない

いやそこまで自分を責めなくても。(^^;

言語の習得は、文法も知っていないといけないし、単語も覚えねばならないので、どちらか一方だけマスターしてから、という訳にはいかず、どうしても慣れながら覚える形になるので、もどかしいですね。その上に理路整然とした思考の組み立てを要求されます。
というわけで、文章で書いてある仕様をプログラムに落とし込む作業は、コツをつかむまでなかなかうまくいかない事も多いと思いますが、
練習・努力あるのみです。ひたすら課題を解いてください。
自分でゲームつくりにチャレンジするのも良いですよ。

投稿日時 - 2009-03-04 00:17:44

お礼

温かいお言葉を頂き、ありがとうございます。
いや、今回は正しい解答をすぐに思い浮かばなかったのは、相当ショックでした。
正解を見ると、物凄く簡単な発想じゃないですか。
それが頭の片隅にも過ぎらなかったなんて、もう少しできると思ってたのに残念で仕方ありません。
edp3142さん、本当にアドバイス感謝します。
いやはや、今回の問の答えは簡単過ぎました。
それだけに物凄く悔しいんですね。後、憤りも感じました。
この簡単な数学を解けなかった衝撃は中々消せるものではありません。
立ち直るのに暫し時間を必要とするでしょう。
本当に自分の頭の悪さにガッカリです……トホホ……。

投稿日時 - 2009-03-04 00:51:27

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

何処へ突っ込みを入れると良いのかイマイチ掴みかねますが感じたところへ何点か。

・質問者さんのコードの問題点
コードを弄りまくって至った結果なのでしょうが、case 4の条件で<font color="blue"/>を指定しているのが混乱の元です。
まずHTMLの基本を理解してください。HTMLは「開始タグと終了タグを挟んだのが1セット」です。
  <font color="blue">青くする文字列</font>
というのが基本的な記法なので青くしたい文字列の出力の前後にタグを付けるべきなのが1点。
質問者さんのコードはforループで次のループに有効となる色付きタグを挿入しているので、コードを書いている途中で「4番目の条件分岐で5番目に有効になるタグを書いている」という混乱に陥っているのだと思います。
またフォントタグの末尾を"/>"で終了しているのもあまり良くないのでは。
フォントタグは色を付ける対象の文字列を囲むように付けるものなので、単体で終わってしまうタグにするのは良くないと思います。

・回答のコードの確認
上記の点に注目して回答のコードを見直してください。
土曜日と出力する前後で色つけのフォントタグを設定して終了、また日曜日と出力する前後で同じくフォントタグを設定して終了させています。
また条件分岐に「土」「日」という中身のデータを使用しているので、もし元の配列の曜日順が入れ替わっても同じコードで処理が可能です。

こんなところでしょうか?

投稿日時 - 2009-03-03 20:48:44

お礼

レスを頂き、ありがとうございます。
なるほど、自分はHTMLの基礎も知らないという事なのですね。
全くもってお恥ずかしい限りです。
でも、この恥の代わりに取り敢えず前半部分で2つ学習しました。
これは皆様からすれば簡単なプログラムなのでしょうけど、あっという間にというか、少し考えれば真っ先に正当なソースを書けるものでしょうか。
それが書けない自分は救いようの無いバカなのでしょうか。
情けなさ過ぎます。自分に憤激を感じます。でも、救われない。
バカなソースコードしか書けない自分は哀れなものですね。

投稿日時 - 2009-03-03 21:22:11

ANo.1

???
>何故4番目をしているのに5番目の土曜日が青になるのか、
>同じく日曜日も赤くなるのかが謎
これが聞きたい部分かな?

まず、switch() - case が文法上、そもそも何をしているものなのかを理解できてないんだね。
後述の物は4番目とか5番目とかいう検査方法ではなく取り出した物が「土」「日」なのかを調べてるよ。

前述の物は後述の物と違い、月曜開始のカレンダーとかに作り替えなさいと言われたら対応が面倒になる。

投稿日時 - 2009-03-03 20:34:03

お礼

レスを頂き、ありがとうございます。

>まず、switch() - case が文法上、そもそも何をしているものなのかを理解できてないんだね。

できれば、ご教授頂けると、大変有り難いのですが。

投稿日時 - 2009-03-03 21:11:46

あなたにオススメの質問