Incompatible types: int[][] cannot be converted to int[]

Preciso de ajuda. Preciso criar um projeto Puzzle8, e na linha int[] pzero = localizarPZero(checar.getPosicao()); diz que Incompatible types: int[][] cannot be converted to int[] sendo que nesta linha eu já to criando um novo objeto pzero Array que é pra indicar a única posição (de dimensão única) que o 0 estará na matriz. Eu já tentei colocar int[][] pzero obviamente não deu, não entendo pq esse tipo de erro, me ajudem.
E sim, mais adiante eu já criei o método localizarPZero() .

public class Puzzle1{
public static void main(String[] args) {
int[][] mInicio = {{2,4,3},{1,0,6},{7,5,8}}; //matriz início (embaralhado)
// int[][] mD1 = {{2,0,3},{1,4,6},{7,5,8}}; //matriz Desenvolvimento 1 (estado intermediário)
int[][] mFinal = {{1,2,3},{4,5,6},{7,8,0}}; //matriz final (solução)
Quads partir = new Quads(mInicio);
buscarmFinal(partir,mFinal);

}


//Método1 para buscar a matriz solução

public static void buscarmFinal(Quads mInicio, int[][] mFinal){   //SEMPRE para estanciar o método pra outra classe tem que ser estático
    ArrayList<Quads> gerados = new ArrayList<>(); //nova lista de matriz(conjunto) que será o objeto gerados
    gerados.add(mInicio); //adicionar a matriz inicial ao conjunto gerados 
    int contador = 0; 
    while(gerados.size() != 0){ //Loop até quando vai fazer essa busca pelo Fim 
        Quads checar = gerados.remove(0);
        imprimirPosicao(checar.getPosicao());  
        int[] pzero = localizarPZero(checar.getPosicao()); //a posição do zero só estará em uma posição da dimensão do Array, então iremos procurá-lo
        
        if(Arrays.deepEquals(checar.getPosicao(), mFinal)){
            System.out.println("Possível solução");
            break;
        }
        
        ArrayList<Quads> revisados = new ArrayList<Quads>();
        revisados.add(checar);
        ...

Você está tentando atribuir a int [] pzero o retorno do metodo localizarPZero, porém, esse metodo retorna uma matriz (int [][]), e a sua variável é um array (int []), ou seja, Incompatible types.

Ou você altera o retorno do método pra int, ou o tipo da variável pzero pra uma matriz. Aí você precisa ver qual a opção correta.

private static int[] localizarPZero(int[] posicao){        
    int[] localnum = new int[2]; //matriz 0,1,2 x 0,1,2
    for(int l=0 ; l<posicao.length ; l++){
        for(int c=0 ; c<posicao.length ; c++){
            
    }
}
    return localnum;
}

Veja bem, no método localizarPZero já está como retornar a variável que eu criei neste método e compativelmente está ccomo private static int[] nomedométodoretornável(){… } o problema ainda consiste :frowning:

Na verdade está ocorrendo uma confusão no conceito…ou eu não entendi muito bem sua duvida.

a)
Não é possível indicar a posição de um elemento em uma matriz indicando apenas 1 posição, você deve indicar em qual LINHA e em qual COLUNA este elemento está.

Se quiser indicar apenas uma posição, você terá de transformar esse array 2D(matriz) em um array 1D(simples).

b)
Agora, se você quer guardar a posição desse elemento(2D) em um array de tamanho 2(1D) você poderia fazer assim:

localnum[0] = linha;
localnum[1] = coluna;

c)
Com array 1D você precisa 1 for só. Com array 2D você precisa de 2 for’s pois ele tem linhas e colunas para varrer.

1 curtida

Boa Julio, entendi. Muito obrigado :slight_smile:

1 curtida