Ограничить размер массива 2D (C # UNITY) - PullRequest
0 голосов
/ 05 июня 2018

Здравствуйте, ребята, можно ли ограничить размер массива, как в этом примере

enter image description here

Теперь я хочу показать только 6 из них.

Что я сделал до сих пор, так это

CustomClass

const int MAX = 104;  // = 8 decks * 52 cards / 4cardsoneround
const int Y = 6;

int[,] arrayRoad = new int[Y, X];

 public int[,] GetRoad(int x) {
    arrayRoad = new int[x, 6];
    return arrayRoad;
}

Теперь я отображаю его на своем MainClass какэто

ScoreBoard bsb = new ScoreBoard();

private void Road()
{
    bsb.makeRoad(history); // Road
    int[,] arrayRoad = bsb.GetRoad(6); //<--- sample value 6

    string s = "";
    for (int y = 0; y < arrayRoad.GetLength(0); y++)
    {
        //just 27 for now

        for (int x = 0; x < 28; x++)
        {
            s += string.Format("{0:D2}",arrayRoad[y, x]);
            s += ".";
        }
        s += "\n";
    }
    Debug.Log(s);
}

Проблема с этим кодом заключается в том, что он дает мне Array out of index

Возможно ли это?

Обновлено

public int[,] GetRoad(int x = MAX,int y = Y) {
    arrayRoad = new int[y, x];

    return arrayRoad;
}

Где в моих Max = 104 и Y = 6

int[,] arrayRoad = bsb.GetRoad(12,6); //12 rows and 6 in height

    string s = "";
    for (int y = 0; y < arrayRoad.GetLength(0); y++)
    {
        for (int x = 0; x < arrayRoad.GetLength(1); x++)
        {
            s += string.Format("{0:D2}",arrayRoad[y, x]);
            s += ".";
        }
        s += "\n";
    }
    Debug.Log(s);
}

У меня есть все это значение ранее, прежде чем я выполню код обновления

enter image description here

Теперь, когда я выполняю обновленный код, вот что я получил

enter image description here

Ожидаемый результат должен быть следующим:

enter image description here

Внутри этого черного маркера должны быть показаны только эти двенадцать столбцов, потому что я объявил на своем

int[,] arrayRoad = bsb.GetRoad(12,6);

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Что я сделал здесь, так это скопировал мой старый массив в новый, как показано ниже:

int[,] arrayBigRoadResult = new int[6, x];
//copy manually the element references inside array
for (int i = 0; i < 6; i++)
{
    for (int j = 0; j < x; j++)
    {
        arrayBigRoadResult[i, j] = arrayBigRoad[i, j];
    }
 }
return arrayBigRoadResult;

, а затем вызвал его так:

int[,] arrayRoad = bsb.GetRoad(12);

.12 столбцов и 6 строк:)

0 голосов
/ 05 июня 2018

Обратите внимание:

 public int[,] GetBigEyeRoad(int x) {
    arrayRoad = new int[x, 6]; // <-------------
    return arrayBigEyeRoad;

Там вы фиксируете длину второго измерения массива до 6.

    for (int x = 0; x < 28; x++)
    {
        s += string.Format("{0:D2}",arrayBigEyeRoad[y, x]); // <------------

Там вы пытаетесь получить доступ к индексам до28 на втором измерении массива.Отсюда и ошибка Out of Range.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...