2017-03-14 12 views
-2

プログラムを作成しましたが、配列からランダムな要素を選択したいのですが、その要素が特定の型でないことを確認する必要があります。どのような型かを示すために、配列を作成したときに3つの数値を割り当てました。 0 =正常なヒト、1 =ゾンビ、2 =ネコ。配列は、最初に10 * 10の通常人間の配列を生成しますが、右クリックするとゾンビを生成できます。この機能は、プレイがスタートボタンに当たったときに実行されます(質問に必要のない機能についての情報)。ゾンビが選択されていない場合、私は人間からランダムなものを作成したい。これは、これまでのコードです:2つの変数を持つ配列からランダムな要素を選択する方法

for (int x = 0; x < 10; x++) { 
      for (int y = 0; y < 10; y++) { 
       if (canZombSpawn == false) { 
        ZombieSpreader(playingGrid[x][y].face, playingGrid[x][y].typeOfChar); 
       } else { 
        do { 
         t = (int) ((Math.random() * 10)); 
         p = (int) ((Math.random() * 10)); 

        } while (playingGrid[t][p].typeOfChar != 0); 
        image = new ImageIcon("zombie.gif"); 
        playingGrid[t][p].face.setIcon(image); 
        playingGrid[t][p].typeOfChar = 1; 
        ZombieSpreader(playingGrid[x][y].face, playingGrid[x][y].typeOfChar); 
       } 
      } 
     } 

ZombieSpreaderは(重要でない)方法

playingGridが配列され、typeOfCharが文字の種類です。

すべてのヘルプははるかに

+0

それらを回す 'java'と' javascript'タグとは何ですか? – SkrewEverything

+0

JavaとJavaScriptは異なる言語です。ご質問はJavaに関するものです。 –

+2

申し訳ありませんが、私はあなたに何を求めているか考えていません。 – ajb

答えて

1

これは特に効率的ではありません)=感謝を高く評価しているが、それはあなたのニーズのために働く必要があります。基本的には

int[][] data = new int[10][10]; 
Random rnd = new Random(); 
for (int row = 0; row < 10; row++) { 
    for (int col = 0; col < 10; col++) { 
     data[row][col] = rnd.nextInt(4); 
    } 
} 

Random rndFind = new Random(); 
int row = 0; 
int col = 0; 
boolean found = false; 
do { 
    row = rndFind.nextInt(10); 
    col = rndFind.nextInt(10); 
    if (data[row][col] == 0) { 
     found = true; 
    } 
} while (!found); 
System.out.println("Found human @ " + row + "x" + col); 

、それだけで2つのランダムなインデックスを生成する(行/ COL)配列内の値をチェックします。ループ内にある「人間」の場合は配列内の値をチェックし、そうでなければ再度試みます。

各要素は(その位置と種類を知っていた)自己完結型のオブジェクトだったとあなたの代わりに配列

Listを使用した場合、私は抵抗することはできませんので、...もっと効率的な方法を生成するために容易になるだろう...

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 
import java.util.Random; 
import java.util.stream.Collectors; 

public class Test { 

    public enum CharacterType { 
     HUMAN, ZOMBIE, CAT; 

     private static Random rnd = new Random(); 

     public static CharacterType random() { 
      switch (rnd.nextInt(3)) { 
       case 0: 
        return HUMAN; 
       case 1: 
        return ZOMBIE; 
       default: 
        return CAT; 
      } 
     } 
    } 

    public static class CharacterEnity { 

     private int gridX, gridY; 
     private CharacterType type; 

     public CharacterEnity(CharacterType type, int gridX, int gridY) { 
      this.gridX = gridX; 
      this.gridY = gridY; 
      this.type = type; 
     } 

     public int getGridX() { 
      return gridX; 
     } 

     public int getGridY() { 
      return gridY; 
     } 

     public CharacterType getType() { 
      return type; 
     } 

     public void setGridX(int gridX) { 
      this.gridX = gridX; 
     } 

     public void setGridY(int gridY) { 
      this.gridY = gridY; 
     } 

    } 

    public static void main(String[] args) { 
     // This is the main collection... 
     List<CharacterEnity> entities = new ArrayList<>(100); 

     // This is just setup... 
     List<Integer> rows = new ArrayList<>(Arrays.asList(new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})); 
     List<Integer> columns = new ArrayList<>(Arrays.asList(new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})); 

     Collections.shuffle(rows); 
     List<Integer> unusedColumns = new ArrayList<>(10); 
     while (!rows.isEmpty()) { 
      Collections.shuffle(columns); 
      unusedColumns.addAll(columns); 
      int row = rows.remove(0); 
      while (!unusedColumns.isEmpty()) { 
       CharacterType type = CharacterType.random(); 
       entities.add(new CharacterEnity(type, unusedColumns.remove(0), row)); 
      } 
     } 
     // End setup... 

     List<CharacterEnity> humans = entities.stream().filter(e -> e.getType() == CharacterType.HUMAN).collect(Collectors.toList()); 
     System.out.println("Found " + humans.size() + " humans"); 
     Collections.shuffle(humans); 
     CharacterEnity turn = humans.get(0); 
     System.out.println("Turning human @ " + turn.getGridX() + "x" + turn.getGridY()); 
    } 

} 

オーケーをプレイしたので、基本的にこれは(それがグリッド上のどこを知っているCharacterEntityクラスを定義し、あなたのニーズに応じて、同様の位置にエンティティをマッピングするMapを持つことができます)

それは人間のキャラクターを得るだけに、エンティティのListをフィルタリングし、それは、その後、それをランダム化するために、このListをシャッフル最初の要素をつかみ、

関連する問題