2016-12-25 6 views
0

私は非常にjavaで新しいです。 私は、このコードでランダムな配列を作るクラスを持っています。アプリ全体にランダムな配列を保存する

public class game { 
    private int max = 32; 
    private int min = 1; 
    private Random r = new Random(); 
    private Integer[] words_Image = new Integer[10]; 
    public void setwords_Image(Integer[] words_Image) { 
     this.words_Image = words_Image; 
     for (int i = 0; i < words_Image.length; i++) { 
      int num = r.nextInt(max - min + 1) + min; 
      int j = 0; 
      while (j < i) { 
       if (words_Image[j] == num) { 
        num = r.nextInt(max - min + 1) + min; 
        j = -1; 
       } 
       j += 1; 
      } 
      words_Image[i] = num; 

     } 

    } 

    public Integer[] getWords_Image() { 
     setwords_Image(words_Image); 
     return words_Image; 
    } 
} 

アレイを一度作成してから、アレイ全体を一定のままにしてアプリ全体で使用したいとします。 私はそのクラスからオブジェクトを作るときにこの配列が毎回変更されたので、私はそれを行う方法がわかりません。 誰でも助けてくれますか?

+0

Javaで 'static'キーワードの役割を知るだけでよいのです。私の答えがあなたを助けることを願っています。 –

+0

本当に必要なのはシングルトンです。 @ WasiAhmadの提案、静的変数は、効果的なシングルトンを得るための1つの方法です。 'enum'を含むいくつかのものがあります。あなたの好きな検索エンジンは、オプションを見つけるためにすばらしいものでなければなりません - 彼らは確かにネット上のいくつかの場所で説明されています。 –

+0

私の答えがあなたを助けたら、それを受け入れることができます。 (あなたがstackoverflowに新しいので、これを言って) –

答えて

1

「このクラスからオブジェクトを作成すると、この配列が毎回変更されるので、Javaのstaticキーワードについて知っておく必要があります。

スタティック変数:Javaでは、変数はstaticキーワードで宣言できます。例を以下に示します。

static int y = 0; 

変数がキーワードstaticで宣言されている場合、その変数はクラス変数と呼ばれます。すべてのインスタンスは同じ変数のコピーを共有します。インスタンスを作成する必要はなく、クラス変数に直接アクセスできます。

staticキーワードがないと、それはインスタンス変数と呼ばれ、クラスの各インスタンスには変数のコピーがあります。

  • これはクラスに属し、(インスタンス)オブジェクトしない変数である

  • 静的変数は、実行の開始時に、一度だけ初期化されます。これらの変数は、インスタンス変数の初期化の前に、最初に初期化されます。

  • クラスのすべてのインスタンスが共有する1つのコピー。

  • 静的変数は、クラス名によって直接アクセスすることができ、任意のオブジェクトを必要としない

構文:<class-name>.<variable-name>

をより詳細に知ることがStatic Methods, Variables, Static Block and Class with Example上の記事を読んでください。

編集:私はあなた自身でそれを探索して解決したかったのですが、あなたが苦労しているので、私は解決策を追加しています。あなたが望むものは、いろいろな形で達成することができます。

class Game { 

    private static final int max = 32; 
    private static final int min = 1; 
    private static final Integer[] words_Image = new Integer[10]; 

    static { 
     setwords_Image(); 
    } 

    private static void setwords_Image() { 
     Random r = new Random(); 
     for (int i = 0; i < words_Image.length; i++) { 
      int num = r.nextInt(max - min + 1) + min; 
      int j = 0; 
      while (j < i) { 
       if (words_Image[j] == num) { 
        num = r.nextInt(max - min + 1) + min; 
        j = -1; 
       } 
       j += 1; 
      } 
      words_Image[i] = num; 
     } 
    } 

    public Integer[] getWords_Image() { 
     return words_Image; 
    } 
} 

public class test { 

    public static void main(String[] args) { 
     Game g1 = new Game(); 
     System.out.println(Arrays.toString(g1.getWords_Image())); 
     Game g2 = new Game(); 
     System.out.println(Arrays.toString(g2.getWords_Image())); 
    } 
} 

これは、出力します(あなたが期待するよう)

[1, 32, 18, 20, 27, 8, 9, 31, 3, 19] 
[1, 32, 18, 20, 27, 8, 9, 31, 3, 19] 
+0

お返事ありがとうございます。あなたは私の例でより具体的になりますか? –

+0

私はrandom_numberを含むwords_image配列が1回作られた後、私のアプリでその数字を使うことができます。私の変数を静的にしてmyclass.myvariableを使うとsratrtで空の配列が得られる –

+0

私の答えが更新されたのでうまくいけば助けになるでしょう。私はあなたがチュートリアルを踏んで、javaの 'static'に関するすべてを学ぶことを奨励したいと思います。 –

0

あなたが本当にシングルトンである必要なもの。これは、Gamma et al。:Design Pattern(Gang of Four)の記述から最もよく知られているプログラミングのよく知られた概念です。あなたはWhat is an efficient way to implement a singleton pattern in Java?の議論を見てください。 2つのトップの回答はどちらも、Javaでシングルトンを実装するためにenumを提唱していますが、他のオプションも答えに記載されています。あなたが他の数字を入れてから、アレイを使用するコードを防ぎたい場合は

System.out.println(Arrays.toString(Game.INSTANCE.getWordsImage())); 

:ランダムな配列は、例えば行うアクセスする必要が

public enum Game { 
    INSTANCE; 

    private int max = 32; 
    private int min = 1; 
    private int size = 10; 
    private final int[] wordsImage; 

    private Game() { 
     wordsImage = new int[size]; 
     Random r = new Random(); 
     for (int i = 0; i < wordsImage.length; i++) { 
      int num = r.nextInt(max - min + 1) + min; 
      int j = 0; 
      while (j < i) { 
       if (wordsImage[j] == num) { 
        num = r.nextInt(max - min + 1) + min; 
        j = -1; 
       } 
       j += 1; 
      } 
      wordsImage[i] = num; 
     } 
    } 

    public int[] getWordsImage() { 
     return wordsImage; 
    } 
} 

クラス:あなたのケースではenumは次のようになります。

return Arrays.copyOf(wordsImage, size); 
+0

シングルトンを作る必要があり、静的変数では不十分だと思うなら、答えを正当化してください。 – Sharcoux

+0

各オプション(静的変数とシングルトンの他の実装)には賛否両論があります。あなたはここで詳細を読むことができます:[静的クラスとシングルトンパターンの違いは?](http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern) –

+0

私は違いを知っている整数の配列の場合、私はシングルトンを作る際に何のプロも見ません。短所のみ。だから、この特定のケースでシングルトンが良いと思うなら、あなたの答えを正当化してください。 – Sharcoux

関連する問題