Как создать динамический 2D-массив и сохранить в нем перемешанный массив - PullRequest
0 голосов
/ 17 ноября 2018

Я создал 2D-массив с фиксированным числом или строками и массивом с номерами 1-4. Я должен перетасовать массив, а затем сохранить этот массив в массиве. Однако, когда я иду напечатать весь массив данных после, он не совпадает, и кажется, что он берет мой последний случайный случай и печатает его для всех строк.

Например, один из моих выводов:

3, 2, 1, 4

1, 2, 4, 3

2, 1, 3, 4

2, 3, 4, 1


2, 3, 4, 1

2, 3, 4, 1

2, 3, 4, 1

2, 3, 4, 1

Может ли кто-нибудь помочь мне понять мою ошибку?

package practice;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
import java.util.List;

public class Practice {
  public static void main(String[] args) {
    //Make arraylist for teams
    List < Integer[] > teamMatches = new ArrayList < > ();
    //Array for team numbers
    Integer[] teamNums = new Integer[] {
      1,
      2,
      3,
      4
    };

    for (int i = 0; i < 4; i++) {
      //shuffle array    
      Collections.shuffle(Arrays.asList(teamNums));
      //add array to arraylist
      teamMatches.add(teamNums);
      //print out
      System.out.println(teamMatches.get(i)[0] + ", " + teamMatches.get(i)[1] + ", " +
        teamMatches.get(i)[2] + ", " + teamMatches.get(i)[3]);

    }
    System.out.println("_____________________________");
    //print out entire match array
    for (int n = 0; n < 4; n++) {

      System.out.println(teamMatches.get(n)[0] + ", " + teamMatches.get(n)[1] + ", " +
        teamMatches.get(n)[2] + ", " + teamMatches.get(n)[3]);




    }



  }

1 Ответ

0 голосов
/ 17 ноября 2018

Когда вы добавляете ваши teamNums в teamMatches, вы передаете ссылку (указатель) на тот же массив (то же место в памяти). Поэтому, когда вы печатаете после цикла for, вы получите только последний известный случай перемешивания, потому что именно так выглядит массив.

Вы должны объявить новую переменную массива для каждой итерации цикла for. Попробуйте:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
import java.util.List;

public class Practice {
    public static void main(String[] args) {
        //Make arraylist for teams
        List < Integer[] > teamMatches = new ArrayList < > ();

        for (int i = 0; i < 4; i++) {
            // *create new Array for team numbers
            Integer[] teamNums = new Integer[] {1, 2, 3, 4};

            //shuffle array    
            Collections.shuffle(Arrays.asList(teamNums));

            //add array to arraylist
            teamMatches.add(teamNums);

            //print out
            System.out.println(
                teamMatches.get(i)[0] + ", " 
                + teamMatches.get(i)[1] + ", "
                + teamMatches.get(i)[2] + ", "
                + teamMatches.get(i)[3]
            );
        }
        System.out.println("_____________________________");

        //print out entire match array
        for (int n = 0; n < 4; n++) {    
            System.out.println(
                teamMatches.get(n)[0] + ", "
                + teamMatches.get(n)[1] + ", "
                + teamMatches.get(n)[2] + ", "
                + teamMatches.get(n)[3]); 
        }
    }
}
...