【问题标题】:How to change or insert value in a 2D Array nested for loop如何在嵌套 for 循环的二维数组中更改或插入值
【发布时间】:2021-01-07 02:32:35
【问题描述】:

我对仅在 CLI 中进行编程和工作非常陌生。我可能试图做一些完全错误的事情或以错误的方式去做。我正在使用嵌套的 for 循环来创建二维网格数组,将字符分配给我的 (int i) 和 (int k) 以创建边框。现在在另一种方法中,我试图向网格注入一个值,因此当打印网格时,我可以更改网格该位置的字符。我已经手动构建了网格,因为您只需选择 grid[1][2] = a.只是似乎无法使用 for 循环将我的头包裹起来。使用 for 循环的原因,因为我可以通过调整网格大小来调整网格的大小并显示边框。

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("|");
        }

    }

【问题讨论】:

  • 当你说你想从另一个方法注入 -5 时,你介意展示一个最终目标的例子吗?换句话说,只是为了澄清您希望最终结果发生什么。
  • 我选择了一个 neg int,它可以是任何 neg int。我的思考过程和我认为二维网格看起来像 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' 我会根据值打印出一个字符。所以我正在寻找一种方法,我可以注入一个负数,所以当地图打印出来时,它将更改为我为 neg int 指定的字符,基本上制作一个游戏屏幕 int cli,我将能够在其中移动一个字符地图

标签: java for-loop arraylist


【解决方案1】:

与朋友交谈,他给了我这个解决方案。所以现在在 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 && playerPositionY == i){
                    foundRow = true;
                }
                for (int k = 0; k < map[i].length; k++){
                    if (foundRow && (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("|");
        }

    }

【讨论】:

    【解决方案2】:

    我认为您应该在网格上拆分两个操作:updateprint。最好将网格定义更改为 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);
    }
    
    |---|
    |   |
    |   |
    |   |
    |---|
    
    |---|
    |^ ^|
    | | |
    | - |
    |---|
    
    |---|
    | | |
    |-|-|
    | | |
    |---|
    

    【讨论】:

    • 非常酷。我喜欢这个,我可以看到这对于我正在做的这个学习项目的其他一些想法非常有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2021-09-03
    • 1970-01-01
    • 2023-04-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多