[JAVA] Desafio: percorra circularmente uma matriz


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. :)

Matriz Desafio - Daniel Accorsi

, , ,

  1. #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]

(não será publicado)