簡體   English   中英

使用嵌套的FOR循環從2D數組打印整數

[英]Printing integer from 2D array using nested FOR Loops

我在AI項目的一部分Java代碼中遇到了一些問題。 該程序應該采用代表迷宮的11x13 2d數組。 我們給的印刷迷宮為每個單元格使用字符,但是為了易於使用,我使用助記碼將其轉換為整數。

我的問題是,當我嘗試將2d整數數組打印到屏幕上以檢查傳送是否正常時,即使我有一個檢查函數也能逐個檢查該數組,以檢查錯誤,即使每個單元格都為零,價值觀。

該項目目前由2個文件組成。 主文件-函數(AISemesterProject.java)和將來將實現UCS算法的文件(UCS.java)

AISemesterProject.java

package aisemesterproject;

public class AISemesterProject
{
    public static void main(String[] args)
    {
        UCS a = new UCS();

        a.checkArrayInt();
        a.printInt();
    }
}

UCS.java

package aisemesterproject;

import java.util.Arrays;

public class UCS
{
    int row = 11;
    int col = 13;
    int[][] array_int = new int[row][col];

    public UCS()
    {
        // Lets assume
        // x = 0
        // e = 1
        // d = 2
        // s = 8
        // g = 9
        int[][] array_int = new int[][] {
            {0,1,0,1,1,1,1,0,0,1,0,9,0},
            {1,1,1,2,0,1,1,0,0,1,2,1,0},
            {0,1,0,1,1,1,1,0,0,1,0,0,0},
            {8,1,2,0,1,2,0,1,1,2,1,1,1},
            {0,0,1,1,0,1,1,1,0,0,0,0,0},
            {1,2,1,0,1,0,1,1,0,0,1,1,1},
            {0,1,2,0,1,0,0,2,1,1,2,1,9},
            {1,0,1,1,2,1,1,1,0,1,1,1,1},
            {1,1,2,1,1,0,0,1,0,0,0,0,0},
            {0,0,1,1,1,0,0,1,1,1,1,1,2},
            {0,0,1,0,0,1,1,1,0,9,0,1,1}
        };
    }

    public void checkArrayInt()
    {
        int i = 0, j = 0;
        boolean checker = false;

        for(i = 0; i < row; i++)
        {
            for(j = 0; j < col; j++)
            {
                if(!(array_int[i][i] == 0 || array_int[i][j] == 1 || array_int[i][j] == 2 || array_int[i][j] == 8 || array_int[i][j] == 9))
                {
                    checker = true;
                    System.out.print("Error at Row:" + i + " Column:" + j + "\n");
                }
            }
        }

        if(checker == false)
        {
            System.out.print("Array OK... \n");
        }
    }

    public void printInt()
    {
        int i = 0, j = 0;

        //System.out.println(Arrays.deepToString(array_int));

        for(i = 0; i < row; i++)
        {
            System.out.print("Row " + (i + 1) + ":");

            for(j = 0; j < col; j++)
            {
                System.out.print(" " + String.valueOf(array_int[i][j]));
                //System.out.print(" " + Integer.toString(array_int[i][j]));
                //System.out.printf(" %d", array_int[i][j]);
                //System.out.print(" " + array_int[i][j]);
            }

            System.out.print("\n");
        }
    }
}

輸出量

輸出量

如您所見,輸出不是我所期望的,並且我嘗試了4種不同的打印方法(有效1種,注釋3條),但是結果始終相同。

有人知道我在想什么或做錯了什么嗎?

謝謝你的時間。

看來您有范圍問題...

int[][] array_int = new int[row][col];

public UCS()
{
    // Lets assume
    // x = 0
    // e = 1
    // d = 2
    // s = 8
    // g = 9
     array_int = new int[][] {
        {0,1,0,1,1,1,1,0,0,1,0,9,0},
        {1,1,1,2,0,1,1,0,0,1,2,1,0},
        {0,1,0,1,1,1,1,0,0,1,0,0,0},
        {8,1,2,0,1,2,0,1,1,2,1,1,1},
        {0,0,1,1,0,1,1,1,0,0,0,0,0},
        {1,2,1,0,1,0,1,1,0,0,1,1,1},
        {0,1,2,0,1,0,0,2,1,1,2,1,9},
        {1,0,1,1,2,1,1,1,0,1,1,1,1},
        {1,1,2,1,1,0,0,1,0,0,0,0,0},
        {0,0,1,1,1,0,0,1,1,1,1,1,2},
        {0,0,1,0,0,1,1,1,0,9,0,1,1}
    };

您已經將數組創建為類級變量

您的構造函數正在設置局部變量 array_int 此局部變量使具有相同名稱的字段蒙上陰影,因此它永遠不會看到您為其分配的數組。

您應該確保要分配給該字段,最簡單的方法是從構造函數中刪除int[][]字。

謝謝大家。 在開始時,我將declatarion從構造函數移到了變量,並且它起作用了。

package aisemesterproject;

import java.util.Arrays;

public class UCS
{
    int row = 11;
    int col = 13;

    // Lets assume
    // x = 0
    // e = 1
    // d = 2
    // s = 8
    // g = 9

    int[][] array_int = new int[][] {
        {0,1,0,1,1,1,1,0,0,1,0,9,0},
        {1,1,1,2,0,1,1,0,0,1,2,1,0},
        {0,1,0,1,1,1,1,0,0,1,0,0,0},
        {8,1,2,0,1,2,0,1,1,2,1,1,1},
        {0,0,1,1,0,1,1,1,0,0,0,0,0},
        {1,2,1,0,1,0,1,1,0,0,1,1,1},
        {0,1,2,0,1,0,0,2,1,1,2,1,9},
        {1,0,1,1,2,1,1,1,0,1,1,1,1},
        {1,1,2,1,1,0,0,1,0,0,0,0,0},
        {0,0,1,1,1,0,0,1,1,1,1,1,2},
        {0,0,1,0,0,1,1,1,0,9,0,1,1}
    };

    public UCS()
    {
        // Lets assume
        // x = 0
        // e = 1
        // d = 2
        // s = 8
        // g = 9

        // Array initialization outside the constructor scope
    }

    public void checkArrayInt()
    {
        int i = 0, j = 0;
        boolean checker = false;

        for(i = 0; i < row; i++)
        {
            for(j = 0; j < col; j++)
            {
                if(array_int[i][j] == 0) //Check for 0 = x
                {
                    checker = false;
                }
                else if(array_int[i][j] == 1) //Check for 1 = e
                {
                    checker = false;
                }
                else if(array_int[i][j] == 2) //Check for 2 = d
                {
                    checker = false;
                }
                else if(array_int[i][j] == 8) //Check for 8 = s
                {
                    checker = false;
                }
                else if(array_int[i][j] == 9) //Check for 9 = g
                {
                    checker = false;
                }
                else //All other integers, which are false
                {
                    checker = true;
                    System.out.print("Error at Row:" + i + " Column:" + j + "\n");
                }
           }
        }

        if(checker == false)
        {
            System.out.print("Array OK... \n");
        }
   }

    public void printInt()
    {
        int i = 0, j = 0;

        //System.out.println(Arrays.deepToString(array_int));

        for(i = 0; i < row; i++)
        {
             System.out.print("Row " + (i + 1) + ":");

            for(j = 0; j < col; j++)
            {
                System.out.print(" " + String.valueOf(array_int[i][j]));
                //System.out.print(" " + Integer.toString(array_int[i][j]));
                //System.out.printf(" %d", array_int[i][j]);
                //System.out.print(" " + array_int[i][j]);
            }

            System.out.print("\n");
        }
    }
}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM