Как изменить или вставить значение в 2D-массив, вложенный для цикла

#java #for-loop #arraylist

#java #для цикла #arraylist

Вопрос:

Я очень новичок в программировании и работаю только в CLI. Возможно, я пытаюсь сделать что-то совершенно неправильное или делаю это неправильно. Я использую вложенный цикл for для создания 2d-массива сетки, присваивая символы моим (int i) и (int k) для создания границы. теперь другим методом я пытаюсь ввести значение в сетку, чтобы при печати сетки я мог изменить символ в этой позиции сетки. Я сделал это вручную, создав пояс, так как вы можете просто выбрать grid[1][2] = a . просто не могу понять, как это сделать, используя цикл for a . причина использования для цикла, поскольку я могу настроить размер сетки и отобразить границу, просто отрегулировав размер сетки.

 public void printMap() {
        map = new int[15][30];

        System.out.println();
        for (int i = 0; i < map.length; i  ){
                System.out.print("|");
                for (int k = 0; k < map[i].length; k  ){
                    if (i == 0) {
                        System.out.print("-");
                    }else if (i == map.length-1){
                        System.out.print("_");
                    }else if (k == -5){ // i want to inject -5 from another method into the grid so it prints out '^' where ever i inject -5
                        System.out.print("^");
                    }else {
                        System.out.print(" ");

                }
            }
            System.out.println("|");
        }

    }
  

Комментарии:

1. Когда вы говорите, что хотите ввести -5 из другого метода, не могли бы вы показать пример того, как будет выглядеть конечная цель? Другими словами, просто чтобы уточнить, что вы хотели бы получить в качестве конечного результата.

2. я выбрал значение neg int, и это может быть любое значение neg int. мой мыслительный процесс и то, что я думаю, что 2d-сетка выглядит как int: `0,0,1,2,3,4,5 1,0,1,2,3,4,5 2,0,1,2,3,4,5 3,0,1,2,3,4,5 ` поэтому, используя ‘i’ и ‘k’, я распечатываю символ на основе значения. итак, я ищу способ, которым я могу ввести отрицательный номер, поэтому, когда карта будет распечатана, она изменится на символ, который я указываю для отрицательного int, в основном создавая интерфейс ввода игрового экрана, где я смогу перемещать символ по карте

Ответ №1:

Я думаю, вам следует разделить две операции в сетке: update и print . Лучше изменить определение сетки на char[][] и print() метод просто печатает это содержимое (его не должно волновать, что могут означать разные символы). В случае, если вы хотите int вместо этого удерживать, просто используйте if...else для печати правильный символ.

Кроме того, вы должны разделить определение сетки и ее содержимого. Посмотрите на мой простой пример. Существует несколько операций:

  • добавить границу в сетку
  • распечатайте сетку
  • добавьте изображение улыбки в сетку
  • добавьте перекрестное изображение в сетку

 private static void addBorder(char[][] grid) {
    for (int row = 0; row < grid.length; row  ) {
        for (int col = 0; col < grid[row].length; col  ) {
            if (col == 0 || col == grid[row].length - 1)
                grid[row][col] = '|';
            else if (row == 0 || row == grid.length - 1)
                grid[row][col] = '-';
            else
                grid[row][col] = ' ';
        }
    }
}

private static void showSmile(char[][] grid) {
    clearGrid(grid);
    // only for 5x5 grid
    grid[1][1] = '^';
    grid[1][3] = '^';
    grid[2][2] = '|';
    grid[3][2] = '-';
}

private static void showCross(char[][] grid) {
    clearGrid(grid);
    // only for 5x5 grid
    grid[1][2] = '|';
    grid[2][2] = '|';
    grid[3][2] = '|';
    grid[2][1] = '-';
    grid[2][3] = '-';
}

private static void clearGrid(char[][] grid) {
    for (int row = 1; row < grid.length - 1; row  )
        for (int col = 1; col < grid[row].length - 1; col  )
            grid[row][col] = ' ';
}

private static void printGrid(char[][] grid) {
    for (int row = 0; row < grid.length; row  ) {
        for (int col = 0; col < grid[row].length; col  )
            System.out.print(grid[row][col]);

        System.out.println();
    }
}
  

Вывод:

 public static void main(String[] args) {
    char[][] grid = new char[5][5];
    addBorder(grid);
    printGrid(grid);
    System.out.println();
    
    showSmile(grid);
    printGrid(grid);
    System.out.println();
    
    showCross(grid);
    printGrid(grid);
}

|---|
|   |
|   |
|   |
|---|

|---|
|^ ^|
| | |
| - |
|---|

|---|
| | |
|-|-|
| | |
|---|
  

Комментарии:

1. Очень круто. мне это нравится, я вижу, что это очень полезно с некоторыми другими идеями, которые у меня есть для этого учебного проекта, который я делаю. Спасибо!

Ответ №2:

разговаривая с другом, он дал мне это решение. итак, теперь в int ‘i’ (2) и int ‘k’ (2) будет выведено ‘^’

 private void displayGame(){
        printMap(2,2);

    }
    public void printMap(int playerPositionX, int playerPositionY) {
        System.out.println();
        boolean foundRow = false;
        boolean foundPosition = false;
        for (int i = 0; i < map.length; i  ){
                System.out.print("|");
                if (!foundRow amp;amp; playerPositionY == i){
                    foundRow = true;
                }
                for (int k = 0; k < map[i].length; k  ){
                    if (foundRow amp;amp; (playerPositionX == k)){
                        foundPosition = true;
                    }
                    if (i == 0) {
                        System.out.print("-");
                    }else if (i == map.length-1){
                        System.out.print("_");
                    }else if (foundPosition){
                        System.out.print("^");
                        foundPosition = false;
                        foundRow = false;
                    }else {
                        System.out.print(" ");

                }
            }
            System.out.println("|");
        }

    }