Не могу понять, как игнорировать левый и правый большинство элементов массива в цикле - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь заполнить созданный пользователем массив (нечетным размером 3-11) символами в определенной позиции элемента, чтобы получить шаблоны.То, что вводит пользователь, действует как количество строк и столбцов, поэтому, если они вставят 5, как в моем примере ниже, они получат массив 5 на 5.Я пытаюсь получить этот шаблон

-----------
 * * * * *
   * * * 
     *  


-----------  

-----------
 * * * * *
 * * * * *
 * * * * *


-----------

Вот код

public static void main (String [] args) {

    int dimension = findDimension();
    char [] [] array2d = new char [dimension] [dimension];

    char star = '*';

    array2d = pointDown(star,dimension);
    System.out.println();
    print(array2d);
}

public static void print(char [] [] arrayParam) {
    for (int hyphen = 0; hyphen < (arrayParam.length*2)+1; hyphen++) {
        System.out.print("-");
    }

    System.out.println();
    for(char[] row : arrayParam)
    {
        for(char c : row)
            System.out.print(" " + c);
        System.out.printf("\n");
    }

    for (int hyphen = 0; hyphen < (arrayParam.length*2)+1; hyphen++) {
        System.out.print("-");
    }
}

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

public static char [] [] pointDown (char starParam, int dimenParam) {
    char [] [] pointDown = new char [dimenParam] [dimenParam];

    for (int i = 0; i < dimenParam; i++){
        for (int j = 0; j < dimenParam; j++) {
            pointDown[i][j] = ' ';
// I fill the positions first with blank spaces then add the characters
// with the loop below
        }
    }

/* Problem should be in this loop, Is there even a pattern to it though
 * since columns would have to account for both the last and beginning
 * columns after the first loop? Should I make variables for those or is
 */ there a simpler way to do it that I'm missing? 

    for (int i = 0; i <= dimenParam/2; i++) {
        for (int j = 0; j < dimenParam; j++) {
            pointDown[i][j] = starParam;
        }
    }

    return pointDown;
}

1 Ответ

0 голосов
/ 19 апреля 2019

Обновление: после того, как мне сказали, я смог выяснить проблему. Вот как должен выглядеть код

char [] [] pointDown = new char [dimenParam] [dimenParam];

    for (int i = 0; i < dimenParam; i++){
        for (int j = 0; j < dimenParam; j++) {
            pointDown[i][j] = ' ';
// As before this part fills the array with blank spaces
        }
    }

    int columnEnd = dimenParam; // Set up a variable to hold how far the column goes to
    int j = 0;   
    for (int row = 0; row <= dimenParam/2; row++) {
        for (int column = j; column < columnEnd; column++) {
            pointDown[row][column] = starParam;
        }
        columnEnd--;  // I had to decrease the ending column in the outer loop
        j++;          // Originally I had this in the inner loop for the longest time
                      // By moving it to the outer loop I avoid out of Bounds and runtime errors

    }
    return pointDown;

Я почти уверен, что все еще перебиваю сложные вещи, но я доволен этим кодом

...