1

私はJavaにかなり慣れていないので、重複を含まない長さ'number'のランダムな(x、y)座標の配列を生成したいと思います。xまたはyの値を繰り返すことはできますが、(x、y)座標を繰り返してはなりません。出力はポイントである必要はなく、座標のx、y値を保持するための何らかの方法です。

ランダムな点の配列を生成でき、Setを使用して重複する値がないことを確認しようとしましたが、問題が発生しました。条件「while(set.size)」と重複を許可しない「add」メソッドを使用して、一意のポイントを含む正しいサイズの出力を作成してみました。

これはコードです:

Set<Point> set = new HashSet<Point>();
Random position = new Random();
Point test=new Point();

do{
    test.x=position.nextInt(xx);
    test.y=position.nextInt(yy);   
    //xx and yy are the random number limits called from another part of the code
    set.add(test);     
}
while (set.size()<number);

List<Object> list = new ArrayList<Object>(set);
Object[] coord = list.toArray();

これにより、正しい長さの配列が出力されますが、すべての要素は同じです。誰かが助けを提供できますか?

ありがとう

4

3 に答える 3

5

テストは、ループするたびに空間内の同じ変数を指し、ループ内に新しいインスタンスを作成することを修正します-ループの前に一度だけではありません:

Set<Point> set = new HashSet<Point>();
Random position = new Random();
Point test;

do{
    test = new Point();
    test.x=position.nextInt(xx);
    test.y=position.nextInt(yy);   
    //xx and yy are the random number limits called from another part of the code
    set.add(test);     
}
while (set.size()<number);

List<Object> list = new ArrayList<Object>(set);
Object[] coord = list.toArray();
于 2012-04-16T21:49:09.740 に答える
2

同じポイントオブジェクトを変更しています。ただし、毎回XとYを変更するため、ハッシュコードとポイントの等価性も変更するため、同じオブジェクトをセットに複数回配置することになります。興味深いケース。

試す

do{
   test = new Point();
   test.x=position.nextInt(xx);
   test.y=position.nextInt(yy);   
   //xx and yy are the random number limits called from another part of the code
   set.add(test);     
}
while (set.size()<number);
于 2012-04-16T21:49:01.470 に答える
0

値はランダムに選択しますが、繰り返さない

    Random rndm = new Random();
    String[] selectedNumber = new String[15];
    String[] sequanceNumber = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"};

    //*****FIRST LOOP START*****//
    for(byte a = 0; a < 15;){

        int temp = rndm.nextInt(15)+1;

        //*****SECOND LOOP START*****//
        for(byte b = 0; b < 15; b++){

            String s4 = temp+"";

            //*****CHECKING CONDITION START*****//
            if(s4.equals(sequanceNumber[b]) ){


                selectedNumber[a] = s4;

                String s1 = sequanceNumber[b];
                s1 = s1.replace(s1, " ");
                sequanceNumber[b] = s1;

                a++;

            }
            //*****CHECKING CONDITION END*****//
        }
        //*****SECOND LOOP END*****//
    }
    //*****FIRST LOOP END*****//


    //*****PRINT ALL RANDOM VALUES BUT NOT REPEATED VALUES*****//
    System.out.println(Arrays.toString(selectedNumber));
于 2019-02-22T11:19:41.373 に答える