Vamos lá, isso aqui precisa um pouco mais de movimento. Um pequeno desafio aos leitores do blog. Estão vendo a imagem abaixo? Então, que tal fazer uma varredura na matriz seguindo a ordem da flecha? O matriz pode ser do tipo que quiser. O objetivo é apenas seguir a ordem. Deve-se imprimir no console a coordenada atual (x,y) e seu conteúdo.
Postem nos comentários suas idéias ou conceitos. Detalhe, precisa ser em Java.

#1 by Lucas iorio on 23/01/2012 - 9:20
Olá achei legal o desafio, irei colocar em meu blog também !
Não gostei do código que fiz, mas funcinou !
[code]
package com.byiorio;
public class Desafio3 {
private static final int IR_PARA_CIMA = 3;
private static final int IR_PARA_ESQUERDA = 2;
private static final int IR_PARA_DIREITA = 0;
private static final int IR_PARA_BAIXO = 1;
// http://www.ciin.com.br/danielaccorsi/index.php/2009/05/java-desafio-percorra-circularmente-uma-matriz/
/***
* @author Lucas iorio http://www.byiorio.com
* @param args
*/
public static void main(String[] args) {
//tamanho do array
int[][] resultado = new int[6][6];
//guardar onde inicia e qual a direcao incial
int percorreX = 0, percorreY = 0, direcao = IR_PARA_DIREITA;
//vai guardar o tamanho atual que esta percorrendo
int tamanhoXcorr = 0, tamanhoYcorr = 0;
//Irá guardar o tamanho fixo do array (nao seria necessario, fiz para um melhor entendimento)
int tamanhoXmax = resultado.length - 1, tamanhoYMax = resultado[0].length - 1;
//numeroBase : identifica os passos do lugar percorrido
for (int numeroBase = 0; numeroBase tamanhoYMax - tamanhoYcorr) {
direcao = IR_PARA_BAIXO;
percorreY = tamanhoYMax - tamanhoYcorr;
percorreX = tamanhoXcorr + 1;
}
break;
case IR_PARA_BAIXO:
resultado[percorreX][percorreY] = numeroBase;
percorreX++;
//Verificar se é necessário mudar de direção
if (percorreX > tamanhoXmax - tamanhoXcorr) {
direcao = IR_PARA_ESQUERDA;
percorreX = tamanhoXmax - tamanhoXcorr;
percorreY = tamanhoYMax - tamanhoYcorr - 1;
}
break;
case IR_PARA_ESQUERDA:
resultado[percorreX][percorreY] = numeroBase;
percorreY--;
//Verificar se é necessário mudar de direção
if (percorreY < tamanhoYcorr) {
direcao = IR_PARA_CIMA;
percorreY = tamanhoYcorr;
percorreX = tamanhoXmax - tamanhoXcorr - 1;
}
break;
case IR_PARA_CIMA:
resultado[percorreX][percorreY] = numeroBase;
percorreX--;
//Verificar se é necessário mudar de direção
if (percorreX < tamanhoXcorr + 1) {
tamanhoXcorr += 1; //chegou no fim, diminui o espaco a percorrer
tamanhoYcorr += 1; //chegou no fim, diminui o espaco a percorrer
direcao = IR_PARA_DIREITA;
percorreY = tamanhoYcorr;
percorreX = tamanhoXcorr;
}
break;
default:
break;
}
}
// Mostra MATRIX
for (int[] linha : resultado) {
for (int coluna : linha) {
System.out.print(coluna + " ");
}
System.out.println("");
}
}
}
[/code]