<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


バカなプログラムを作ろう

きしださんの企画に参加します。

(3/11 15:39)完全版できました。nullなら0、nullでなければ1を作るっていう部分がバカみたいでお気に入り。

例外も三項演算子もforも使わずにやるのはまだ出てないみたいでしたので。

public class PrintTest { public static void main(String[] args) { String[][] data = { { "aa", "bb", "cc" }, { "dd", "ee" } }; // String[][] data = {}; // String[][] data = null; new DataPrinter().print(data); } } class DataPrinter { public void print(String[][] data) { DataPrinter[] printers = new DataPrinter[] { this, new NotNullPrinter() }; // null => 0, not null => 1 int p = Boolean.toString(data == null).length() - 4; printers[p].printData(data); } public void printData(String[][] data) { System.out.println("データがありません。"); } } class NotNullPrinter extends DataPrinter { public void printData(String[][] data) { NotNullPrinter[] printers = new NotNullPrinter[] { this, new ArrayPrinter() }; // length 0 => 0, else => 1 int p = data.length / Math.max(data.length, 1); printers[p].printNotNull(data); } public void printNotNull(String[][] data) { System.out.println("データが空です。"); } } class ArrayPrinter extends NotNullPrinter { private ArrayPrinter[] printers; /** * 配列の長さを越えているチェック * @param array 配列 * @param idx インデックス * @return idxが配列の長さ以上ならば1を、そうでなければ0を返す */ private static int outOfBounds(Object[] array, int idx) { int p = Math.max(array.length, idx + 1) - array.length; return p / Math.max(p, 1); } public void printNotNull(String[][] data) { printers = new ArrayPrinter[] { this, new OutofBoundsPrinter() }; printDoubleArray(data, 0); } public void printDoubleArray(String[][] data, int idx) { int p = outOfBounds(data, idx); printers[p].printSingleArray(data, idx, 0); System.out.println(); printers[p].printDoubleArray(data, idx + 1); } public void printSingleArray(String[][] data, int idx1, int idx2) { int p = outOfBounds(data[idx1], idx2); printers[p].printString(data[idx1], idx2); int p2 = outOfBounds(data[idx1], idx2 + 1); printers[p2].printDelimiter(); printers[p].printSingleArray(data, idx1, idx2 + 1); } public void printDelimiter() { System.out.print(","); } public void printString(String[] ar, int idx) { System.out.print(ar[idx]); } } class OutofBoundsPrinter extends ArrayPrinter { public void printDoubleArray(String[][] data, int idx) { } public void printSingleArray(String[][] data, int idx1, int idx2) { } public void printDelimiter() { } public void printString(String[] ar, int idx) { } }


この記事に対するコメント

うおっ、確かにこの手があった!

【2007/03/11 03:33】URL | あらいしゅんいち #-[ 編集]

>あらいさん
できましたよ完全版。基本アイディアは変わってません。再帰の途中で次の人に受け渡していくのがちょっと楽しいです。

【2007/03/11 15:47】URL | とっくり #-[ 編集]

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/41-0ae30214
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。