以下のように3月の日付けを携帯画面に表示します(文字または画像で)。

前後のクラスは省いてあります。3月以外の日になったときの処理にはどんな方法がありますか?
try~catch,if等・・・・

// Question.java

import java.util.*;

public class Question {
int year, month, date;
Hashtable tables;
static final int table2007[][][] = {

{ {0} }, // 2月

{ //3月
          {1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,21,22,23,
24,25,26,27,28,29,30,31}
},

        { {0} }, // 4月

};

Question() {
tables = new Hashtable();
tables.put(new Integer(2007), table2007);
}

public int[] getPattern() {
Calendar now = Calendar.getInstance();
year = now.get(Calendar.YEAR);
month = now.get(Calendar.MONTH)+1;
date = now.get(Calendar.DATE);
int[][][] table = (int[][][])tables.get(new Integer(year));
int pattern[] = table[month-1][date-1];
return pattern;
}

}



回答の条件
  • 1人5回まで
  • 登録:2006/11/08 08:48:36
  • 終了:2006/11/14 19:59:41

回答(2件)

id:tsyk No.1

tsyk回答回数33ベストアンサー獲得回数42006/11/08 14:25:45

なんだか私が以前に別の質問者に回答した内容によく似たコードですね(汗)

そのときに要求された処理が「日付によって取り出すパターン(配列)を変更する。そのパターンには特殊な法則があって計算式で生成できないので、全ての日付分を事前に定義しておく」という物だったため、あのような3次元配列(array[月][日][パターン])を用意したわけなので、単純に日付を表示するだけであれば、こんな面倒な処理はまったく不要です。

ご質問のコードでは3月以外の日付になったときに ArrayIndexOutOfBoundsException が発生しますが、それはデータを事前に用意していないから当然のことです。

ちょっと失礼な言い方になってしまいますが、書かれたコードの意味を理解しないで中途半端に流用を考えるよりも、ご自身がやりたい処理を初めから提示してアドバイスを求めるほうが良いのではないかと思いますよ。

id:tsyk No.2

tsyk回答回数33ベストアンサー獲得回数42006/11/10 17:29:46

ポイント500pt

3月以外の日になったときに「3月以外です」と表示させるだけならば、以下のように month をチェックして if/else で条件分岐を入れる方法があります。失敗するのを承知で table にアクセスして try/catch で例外を捕まえる方法は、本来の用法から考えると邪道だと思うので書きません。

public int[] getPattern() {
  Calendar now = Calendar.getInstance();
  year = now.get(Calendar.YEAR);
  month = now.get(Calendar.MONTH)+1;
  date = now.get(Calendar.DATE);
  if (month == 3) {
    int[][][] table = (int[][][])tables.get(new Integer(year));
    int pattern[] = table[month-1][date-1];
    return pattern;
  }
  else {
    System.out.println("3月以外です");
    return null;
  }
}

このようにした場合には getPattern() の呼び出し側で、戻り値が null かどうかのチェックを忘れないようにしないといけません。また、最初の回答で述べたように、3次元配列を誤用していそうな点が気になりますが、大丈夫でしょうか?

う~ん、果たしてこんな回答でイイのかなぁ……

id:MostInakappe

tsyk様

ありがとうございました。今回のサンプル例示がよくなかったのですが、3次元配列は理解しております。またよろしくお願いいたします。

2006/11/14 19:58:29
  • id:tsyk
    「3月の日付け」って、つまりカレンダーを表示したいのですね?
    ちょっと勘違いをしていました。
    「3月以外の日になったときの処理」というのは、「4月や5月の日付けを表示する方法」のことでしょうか?
    どうも読解力がなくて、すみません。
    コメントで回答を書くのは控えますので、私の質問にコメントで具体的な内容を返信してくだされば、私または誰かが適切な回答を書けるでしょう。
  • id:MostInakappe
    3月以外の日付けになったときに「3月以外です」というようなメッセージを表示します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません