Исключение несоответствия типов

Я разрабатываю игру. Первоначально я использовал логическое значение при декалировании массивов, позднее выяснилось, что вместо использования логического значения я должен использовать int для хранения состояния игры, когда я заменил логическое значение на int. В моем операторе if отображается исключение несоответствия типов и оператор && не определен для логического типа (типов) аргумента, int. Вот мой код оператора if.

int [][] dots

    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);
        canvas.drawPaint(pBack);

        for (int y = 0; y < numRows; y++)
        {
            canvas.drawLine(xStep, yCoords[y], numColumns * xStep, yCoords[y], pDot);

            for (int x = 0; x < numColumns; x++)
            {
                if (y == 0)
                {
                    canvas.drawLine(xCoords[x], yStep, xCoords[x], numRows * yStep, pDot);
                }

                if (dots[x][y])
                {
                    boolean left = x > 0 && dots[x - 1][y];
                    boolean up = y > 0 && dots[x][y - 1];

                    if (left)
                    {
                        canvas.drawLine(xCoords[x], yCoords[y], xCoords[x - 1], yCoords[y], pLine);
                    }

                    if (up)
                    {
                        canvas.drawLine(xCoords[x], yCoords[y], xCoords[x], yCoords[y - 1], pLine);
                    }

                    if (left && up && dots[x - 1][y - 1])
                    {
                        canvas.drawCircle(xCoords[x] - xStep / 2, yCoords[y] - yStep / 2, 10, pLine);
                    }
                }
            }
        }
       for (int y = 0; y < numRows; y++)
        {
            for (int x = 0; x < numColumns; x++)
            {
                canvas.drawCircle(xCoords[x], yCoords[y], 20, pDot);                    
                if (dots[x][y])
                {
                    canvas.drawCircle(xCoords[x], yCoords[y], 15, pLine);                       
                }                                       
            }
        }
        if (firstDotX != -1)
        {
            canvas.drawCircle(xCoords[firstDotX], yCoords[firstDotY], 25, pSelect);
        }
    }

person Umar Farooq    schedule 10.04.2014    source источник
comment
ммм. int не boolean. Вы не можете использовать целочисленное значение, как вы используете логическое значение.   -  person Seelenvirtuose    schedule 10.04.2014
comment
Я не вижу int, это ваш старый или новый код?   -  person Tim    schedule 10.04.2014
comment
@TimCastelijns Я бы предположил, что переменная точек (или это поле?) Раньше была boolean[][], а теперь int[][]. А это - конечно - не работает. Описанная им ошибка, скорее всего, находится в строках, где объявляются и инициализируются булевы переменные left и up.   -  person Seelenvirtuose    schedule 10.04.2014
comment
Конечно, мы можем предположить. Но мы не знаем, поэтому и спросил :-)   -  person Tim    schedule 10.04.2014
comment
Умар, ты путаешь точки и прямоугольники. Если вы хотите, чтобы пользователь щелкнул две точки, чтобы выбрать сторону, то массив dots должен оставаться boolean. Вам нужно будет создать еще один двумерный массив, int[][] boxes, который вы будете использовать для отслеживания того, какой игрок владеет ящиком. Имейте в виду, массив dots на самом деле просто хранит информацию о пользовательском интерфейсе. boxes будет отслеживать информацию о состоянии игры. То есть состояние игры действительно зависит только от нарисованных сторон и принадлежащих ящиков. Точки - это колокольчики и свистки.   -  person Mike M.    schedule 10.04.2014
comment
@МайкМ. Я хочу сделать стороны интерактивными вместо точек. Когда пользователь щелкает между двумя кругами, эта линия должна стать черной.   -  person Umar Farooq    schedule 10.04.2014
comment
@МайкМ. как вы знаете, это игра для двух игроков, поэтому я хочу следить за ходами. То, какой игрок нарисовал линию и какой игрок заполнил коробку. Например, если первому игроку назначен синий цвет, а второму — красный, то для того, чтобы показать, кто какую линию проводит? он должен отображать красные и синие линии между кругами.   -  person Umar Farooq    schedule 10.04.2014
comment
Тогда я бы посоветовал на время полностью избавиться от dots и сосредоточиться на сторонах и блоках, а также на том, как вы хотите отслеживать их состояние. Кроме того, вам нужно будет изменить метод onTouchEvent(), чтобы найти ближайшую сторону вместо ближайшей точки, но это простая модификация. Если стороны должны принадлежать игроку, вам нужно отслеживать их аналогично ящикам, то есть с помощью ints.   -  person Mike M.    schedule 10.04.2014
comment
@МайкМ. Что я собираюсь сделать, так это сохранить точки как логические значения? и отслеживать onTouchEvent() в строках. Это путь?   -  person Umar Farooq    schedule 10.04.2014


Ответы (3)


Это связано с тем, что вы не можете использовать операторы И && и ИЛИ || с целыми числами, поэтому вы можете переопределить условие:

if (left && up && dots[x - 1][y - 1])
                  ------------------
                  this is an integer

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

if (left && up)
person Christian    schedule 10.04.2014
comment
@UmarFarooq что такое dots? Я имею в виду, что это представляет в программе? - person Christian; 10.04.2014
comment
точка - это массив. интервал [][] точки - person Umar Farooq; 10.04.2014
comment
Он хранит вызовы отрисовки на кругах. - person Umar Farooq; 10.04.2014
comment
Можете ли вы привести пример его содержания? - person Christian; 10.04.2014

Да, если в качестве переменной int используются значения left и up, то следующее условие if выдаст исключение несоответствия типов

if (left && up && dots[x - 1][y - 1])

Поскольку результатом left && up будет целое число, а затем вы выполняете логическое И между int и логической переменной, это приведет к исключению несоответствия типа.

Вы должны использовать его следующим образом:

if (((left && up).equals(intValue) && dots[x - 1][y - 1])

Где intValue является допустимым значением out в вашем случае, и теперь (left && up).equals(intValue) даст логическое значение, которое можно легко использовать с другими точками логического значения [x - 1][y - 1]

Смотрите логические операции над переменными int -

2 | 1 = 3 and 4 | 1 = 5. 
person Bhanu    schedule 10.04.2014

Вы пытаетесь использовать тип int в условном операторе, который будет оценивать boolean выражений, что приводит к несоответствию типов. В отличие от других языков, в Java 0 тоже не соответствует false (и переменные типа boolean могут быть только true или false, но не 0 или 1). Вам нужно будет настроить выражение в операторе, которое выдаст логический результат.

Например, вы можете сделать:

if(dots[x][y] == 0){....}

вместо:

if(dots[x][y]){....}

Теперь, если вы используете определенное число в своем массиве точек, которое является нежелательной ситуацией для проверки, вы проверяете это число вместо 0.

Те же правила применяются, если в ваших условных операторах есть несколько выражений, объединенных с операторами && и/или ||.

person Nick Louloudakis    schedule 10.04.2014