2012-01-04 13 views
1

幾何学図形を描画するためのコマンドベースのアプリケーションの種類を作っています。したがって、ユーザがRECT 100, 50, 200, 120のようなものを入力すると、描画パネルの指定された場所に四角形が描画されます。幾何学関数のインデックス

このためには、RECTg.drawRect(100, 50, 200, 120);にマッピングし、そのようなすべての機能を使用して図形を描画する必要があります。

マッピングにはハッシュマップを使用しますが、javaの配列の作成方法はわかりません。私はこれをやったC + +で。

キーには「RECT」を指定し、値にはインデックスのオフセットを指定できます。

これらの機能をどのようにインデックスすることができますか教えてください。あるいは、主な懸案事項に対処するためのより良い方法がありますか?

答えて

5

Javaには関数ポインタはありません。継承および/またはインタフェースを使用して関数ポインタを実行する必要があります。あなたの描画コードで

Map<String,Shape> shapes = new HashMap<String,Shape>(); 
shapes.put("POLY", new Polygon()); 
shapes.put("CIRC", new Circle()); 

:あなたのメインプログラムのコンストラクターまたは静的初期化子で

interface Shape { 
    void draw(int[] data); 
} 

class Polygon implements Shape { 
    public void draw(int[] data) { 
     // Draw polygon using points data[i], data[i+1] for points 
    } 
} 

class Circle implements Shape { 
    public void draw(int[] data) { 
     // Draw circle using data[0], data[1] for the center, and data[2] for radius 
    } 
} 

:ここでは一例であり、私は認めざるを得ない

shapes.get("CIRC").draw(new int[] {100, 100, 50}); 
+0

私の懸念は蒸発したようです!これは私が持っている可能性のある最もエレガントなコードです! –

+0

@VinayakGarg私はまだ構文エラーを修正したと思います:)私は3年以上Javaを書いていないので、C#の構文が私の宣言に潜入しました。 – dasblinkenlight

+0

心配しないでください!私のIDEは構文エラーを処理します:)私はロジックにもっと関心があります。 –

3

、私は本当にありませんでしたあなたの設計を得ました、私はあなたが言ったように、なぜあなたは関数の配列を必要としているのか分からないが、これはjavaでこのことができる方法である。

Function(Javaのメソッド)はJavaの "first-class-sitizen"ではないので、少なくともJava 7ではメソッドの配列を構築することはできません。代わりに、よりオブジェクト指向のアプローチを使用することです - インターフェイスを定義する、各メソッドは、インターフェイス実装の配列を格納できるように、インターフェイス(クラス)の実装になります。 メソッドの配列などの代わりにデザインパターンのコマンドを使用します。これがうまくいきたいです

+0

はいこれが役に立ちます。ありがとう! Javaの知識をさらに深めるために、私はそのような助けが必要だと思います。 –

+0

** Java 7のJavaから**機能を削除しない限り、** ** Reflection **を使用して 'メソッド'の配列を作成できます。 (http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html)私はそれがJavaで問題にアプローチする良い方法だとは思わないが、このようにした。 –

関連する問題