O método gn envolve operadores de deslocamento de bits e não estou conseguindo entender como isso funciona no método.
obrigado pela atenção.
att.
[code]Class nurikabe{
static int[][] gn(int ordem, int N){
int[][] m=new int[N][N];
int bit;
for(int j=0; j<N; j++){
for(int k=0; k<N; k++){
bit = ordem & 1; // quais valores retornarão para estas duas
ordem = ordem >> 1; // variáveis int?
m[j][N-k-1]=bit;
}
}
return m; // qual será esse return?
}
public static void main(String[] arg){
int[][] m;
int N=2;
int cnt=0;
for(int i=0; i<Math.pow(2,N*N); i++){
m=gn(i, N); // repassa 0, 1
if(!bloco2x2(m) & rioUnico(m)){
cnt++;
System.out.println(“Nurikabe #”+cnt+" **********");
imprime(m);
}
}
}
}[/code]
Primeiro de tudo, você sabe o que esses operadores fazem?
Imagine um número qualquer:
1010 0101
Fazer esse número & 1 é o mesmo que fazer:
1010 0101 &
0000 0001
Nesse caso, irá retornar 1 se o último bit for 1, 0 se o último bit for 0.
O próximo >> 1, afasta 1 bit para direita todos os bits da sequência:
1010 0101 >> 1
01010 010 >> 1
001010 01
Acho que com isso você já consegue captar o que esse método está fazendo. Ele está simplesmente guardando o valor de cada bit da matriz em uma posição diferente do vetor. Agora, não procurei entender que posição é essa (aquele calculo maluco ali), até pq vc só perguntou sobre os operadores bitwise.
Olá ViniGodoy,
desculpa pela demora em responder, só consegui tempo para ler a sua ajuda hoje =)
Olha o que estou entendendo,
[code] bit = ordem & 1; // 0 & 1 == 0
ordem = ordem >> 1; // 0 >> 1 == 0
m[j][N-k-1]=bit; // aqui estou em dúvida: se m[0][2-0-1] = 0 == m[0][1] = 0, qual será o valor ou posição que o 0 da variável bit irá ocupar no arranjo de ints m? e qual será o return?
return m; [/code]
T+!
Bom, isso seria difícil de entender sem conhecer o que significam suas variáveis N e ordem. Eu também não sei jogar Nurikabe, então, fica difícil deduzir que lógica é essa. 