2011-07-11 2 views
5

私はJavaに書き込んだJavascriptプログラムを変換していますが、Javaで記述する方法がわからないオブジェクトが1つあります。Javaのオブジェクトリテラル

tetros.types = new Array(); 
    tetros.types[0] = new Object(); 

    tetros.types[0].color = "green"; 
    tetros.types[0].rotations = new Array(); 
    tetros.types[0].rotations[0] = new Object(); 
    tetros.types[0].rotations[0].blocks = Array([0,0],[1,0],[2,0],[2,1]); 
    tetros.types[0].rotations[0].edges ={ 
     "down" :Array([2,0],[2,1]), 
     "left" :Array([0,0],[1,0],[2,0]), 
     "right" :Array([2,1],[1,0],[0,0]), 
     "up" :Array([0,0],[2,1]) 
    } 

    tetros.types[0].rotations[1] = new Object(); 
    tetros.types[0].rotations[1].blocks = Array([0,0],[0,1],[0,2],[1,0]); 
    tetros.types[0].rotations[1].edges ={ 
     "down" :Array([0,1],[0,2],[1,0]), 
     "left" :Array([0,0],[1,0]), 
     "right" :Array([0,2],[1,0]), 
     "up" :Array([0,0],[1,0]) 
    } 

    tetros.types[0].rotations[2] = new Object(); 
    tetros.types[0].rotations[2].blocks = Array([0,0],[0,1],[1,1],[2,1]); 
    tetros.types[0].rotations[2].edges ={ 
     "down" :Array([0,0],[2,1]), 
     "left" :Array([0,0],[1,1],[2,1]), 
     "right" :Array([0,1],[1,1],[2,1]), 
     "up" :Array([0,0],[0,1]) 
    } 

    tetros.types[0].rotations[3] = new Object(); 
    tetros.types[0].rotations[3].blocks = Array([0,2],[1,0],[1,1],[1,2]); 
    tetros.types[0].rotations[3].edges ={ 
     "down" :Array([1,0],[1,1],[1,2]), 
     "left" :Array([1,0],[0,2]), 
     "right" :Array([0,2],[1,2]), 
     "up" :Array([0,2],[1,0],[1,1]) 
    } 


    tetros.types[1] = new Object(); 
    tetros.types[1].color = "blue"; 
    tetros.types[1].rotations = new Array(); 
    tetros.types[1].rotations[0] = new Object(); 
    tetros.types[1].rotations[0].blocks = Array([0,0],[0,1],[1,0],[1,1]); 
    tetros.types[1].rotations[0].edges ={ 
     "down" :Array([1,0],[1,1]), 
     "left" :Array([0,0],[1,0]), 
     "right" :Array([0,1],[1,1]), 
     "up" :Array([0,0],[0,1]) 
    } 
    tetros.types[1].rotations[1] = new Object(); 
    tetros.types[1].rotations[1].blocks = tetros.types[1].rotations[0].blocks; 
    tetros.types[1].rotations[1].edges = tetros.types[1].rotations[0].edges; 

    tetros.types[1].rotations[2] = new Object(); 
    tetros.types[1].rotations[2].blocks = tetros.types[1].rotations[0].blocks; 
    tetros.types[1].rotations[2].edges = tetros.types[1].rotations[0].edges; 

    tetros.types[1].rotations[3] = new Object(); 
    tetros.types[1].rotations[3].blocks = tetros.types[1].rotations[0].blocks; 
    tetros.types[1].rotations[3].edges = tetros.types[1].rotations[0].edges; 

これはオブジェクト全体の約1/4ですが、残りは同じです。

これはどのようにJavaで記述できますか?

+3

あなたは申し訳ありません。結局のところ、これは人々が困っているときに来る場所です、そうです:-)? –

+0

私は知っていますが、私はすでに今日質問をしました。私はちょうど貪欲にしたくないし、何かを返さずにこのサイトを使い続けている、私は助けるために十分な言語ではありません:/ – Diesal11

+5

それは大丈夫です。あなたができることを学び、あなたができるところを助け、あなたはより良くなるでしょう:) –

答えて

3

私は最も深いレベルで起動し、クラスのインスタンス変数、例えばへのプロパティの各セットに変換することができます方法を考え、それから逆方向にあなたのように動作します:

int[][] blocks; 
int[][] edges; 

(Javaはないことに注意してください"down"、 "up"などの連想配列はサポートしていません)。

これらをクラスに入れることができます。あなたのコードから、これらは回転のプロパティのように見えるので、私のようなものをお勧めしたい:

class Rotation { 
    // Instance variables 
    private int[][] blocks; 
    private int[][] edges; 

    // Constructor 
    public Rotation(int[][] blocks, int[][] edges) { 
     this.blocks = blocks; 
     this.edges = edges; 
    } 

    // Accessors and mutators here if applicable 
} 

その後のようなもの:ように

class Type { 
    private Rotation[] rotations; 
    private String color; 
    // etc etc 
} 

と。正式なオブジェクト指向のコンセプト(カプセル化など)は本当に新しくなったようですので、クラスやオブジェクトの基本をカバーするJavaチュートリアルを読んでからJavaに移植することをおすすめします。

+0

ありがとうございました!私は、それぞれの "レベル"ごとに一意のクラスを作成することは考えていませんでした。 – Diesal11

0

アドホックなオブジェクトではなくプロトタイプを使用するように、Javascriptのバージョンを書き直して正直なところから始めます。プロトタイプとJavaクラスとの間のマッピングは、1対1になるはずです。つまり、Javaにはオブジェクトリテラルの概念がないため、多くのことができるかどうかはわかりません。Javaでは、このようなオブジェクトを動的に構築することは実際にはサポートされていません。

+0

プロトタイプの形式はJSONのようですか? – Diesal11

+0

ちょっと、JSONは単なるデータフォーマットです。各javascriptオブジェクトには、通常、共有データ(定数、プロパティ、メソッドなど)を置くプロトタイプがあります。それは良い読書:http://eloquentjavascript.net/chapter8.html(その本全体は実際に良い読書です) –

1

JavaとJavascriptは完全に2つの異なる言語です。正確なマッピングを見つけることができない場合があります。 Javascriptでは、よりリラックスした方法で書くことができます。したがって、Javaに切り替えるときは、すべてのオブジェクトが何であるか、どのプロパティを使用するかを考える必要があります。あなたのケースで

は、例えば、typesはアレイであり、rotationstypesの要素内部配列です。それらを配列に初期化する必要があります。そのためには事前にサイズを知る必要があります。あなたはこのような何かを行うことができます:など

tetros.types = new TypeObject[10]; 
tetros.types[0] = new TypeObject(); 
tetros.types[0].rotations = new Rotation[10]; 
tetros.types[0].rotations[3] = new Rotation(); 

... tetrosはフィールドtypesを持っており、TypeObjectはフィールドrotationsを持っていることを提供しています

一般に、Javaではフィールドを使いすぎるのはよくありません。スタイルの観点からは、セッターとゲッターを持つフィールドがより好まれます。

Javaでは特定のことをするのは非常に面倒であり、新しいデータ設計が必要になる可能性が最も高いです。

全体として、ある言語から別の言語への移植は、両方の言語の深い知識が必要な作業です。したがって、あなたの場合、元のJavascriptソースをガイドラインとして使用しながら、Javaで最初から書き込むことを検討することができます。

関連する問題