Печать целого числа из 2D массива с помощью вложенных циклов FOR

У меня небольшая проблема с частью кода Java, частью проекта AI. Предполагается, что программа возьмет 2d массив 11×13, представляющий собой лабиринт. Печатный лабиринт, который нам дан, использует символы для каждой ячейки, но для удобства я преобразовал его в целые числа с помощью мнемонического кода.

Моя проблема заключается в том, что когда я пытаюсь вывести на экран массив 2D integer, чтобы проверить, все ли в порядке, я получаю нули в каждой ячейке, даже если у меня есть функция check, которая анализирует ячейку массива по ячейке, проверяя неправильные значения.

В настоящее время проект состоит из 2 файлов. Основная файловая функция (AISemesterProject.java) и файл, который будет реализовывать алгоритм UCS в будущем (UCS.Ява)

AISemesterProject.Ява

package aisemesterproject;

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

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

компания UCS.Ява

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 прокомментированный), но результат всегда один и тот же.

У кого-нибудь есть идея, что я упускаю или делаю неправильно?

Спасибо, что уделили мне время.

3 ответа

  1. Похоже, у вас проблема с областью действия…

    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}
        };
    

    массив уже создан как переменная уровня класса

  2. Конструктор задает локальную переменную array_int. Эта локальная переменная затеняет поле с тем же именем, и поэтому она никогда не видит массив, который вы ей назначаете.

    Вы должны убедиться, что вы назначаете полю, что легче всего сделать, удалив int[][]слово из конструктора.

  3. Спасибо всем. Я переместил 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");
            }
        }
    }
    

    Введите описание изображения здесь