Desafio java número 3 =P

Não gostei muito do meu código, mas funciona hehe, segue o desafio.

Povoar uma matriz com um número sequencial, seguindo o sentido da flecha conforme a imagem, e no final imprimir a matriz inteira.

Não clique, ou leia abaixo, antes de tentar ! Caso faça um código melhor, ou tenha uma idéia mais eficiente, entre em contato !

A minha estratégia foi baseada na movimentação, por isso acredito que seja possível melhorar o código. Criei a movimentação: direita, esquerda, cima e baixo e fiz a varredura de fora para dentro.

*
*
*
*
*
*
*
*
*
*
*
já tentou?
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

package com.byiorio;

/***
 * 
 * @author Lucas iorio:
 * www.byiorio.com
 *
 */
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 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 < resultado.length	* resultado[0].length; numeroBase++) {
			switch (direcao) {
			case IR_PARA_DIREITA:
				resultado[percorreX][percorreY] = numeroBase;
				percorreY++;

				//Verificar se é necessário mudar de direção
				if (percorreY > 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("");
		}
	}

}

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Blue Captcha Image
Atualizar

*

Facebook

Get the Facebook Likebox Slider Pro for WordPress
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera