• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mZ

For na diagonal em java

10 mensagens neste tópico

boas pessoal!

Tenho uma duvidazita...

Alguém sabe fazer um for para percorrer um array bidimensional de uma ponta a outra na diagonal?

se for possível deixem ai um exemplo que eu depois desenrasco-me...

tks :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se estivermos a falar de uma matriz quadrada então o for seguinte percorre a diagonal principal.

        int[][] array = {{0, 1, 2}, {3, 4, 5},{6, 7, 8}};
        
        for(int z = 0; z < array.length; z++) {
            System.out.println(array[z][z]);
        }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim é uma matriz quadrada... mas o objectivo era ele percorrer todas as diagonais possíveis, começar numa ponta e acabar noutra... assim ele vai só à diagonal do meio...

o array tem este aspecto:

http://img507.imageshack.us/img507/7710/arraytg8.jpg

e o que é pedido é passar naquelas linhas de cor na diagonal...e depois ao contrário mas isso e mudar valores...

tks  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se bem percebi o problema, penso que seja isto (a não ser que me tenha escapado alguma burrice minha  :-[):

int[][] array = {{0, 1, 2}, {3, 4, 5},{6, 7, 8}};

int coluna = 1;
int linha = 0;

// testes: limites inferiores, superiores e se ou linha == 0 ou coluna == 0 (para ter uma diagonal valida)

int fim;

if (linha != 0)
fim = array.length - linha;
else 
fim = array.length - coluna;

for(int z = 0; z < fim; z++) {
    System.out.println(array[z+linha][z+coluna]);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

neige esse ciclo vai só fazer uma diagonal e depois para...

o objectivo e fazer todas as diagonais do array como ta na figura... acho que vai ser mais que um for...

tens alguma ideia como se faz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi!

A ideia é tu mudares os valores das variáveis linha e coluna. Ou seja, esse ciclo faz a diagonal que começa em [linha, coluna] = [1, 0].. Funciona para as outras diagonais. Basta mudares esses valores. Por exemplo, [linha, coluna] = [2, 0], ou [linha, coluna] = [0, 1]. Era esta a minha ideia... Mas lá está, não sei é se percebi bem a questão!   :D

Edit: Penso que já percebi a situação! Queres fazer a listagem completa da matriz, mas listando diagonal a diagonal, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hmm eu vou tentar mudar os valores para que passe em todas as diagonais...

sim a ideia era essa... vamos ver se consigo com este for!

obrigado :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este é um modo possível:

int[][] array = {{0, 1, 2, 3}, 
                 {1, 0, 1, 2},
                 {2, 1, 0, 1},
                 {3, 2, 1, 0}};

for(int i = 0 ; i < array.length ; ++i){

    System.out.print("\nDiagonal[" + i + "][0] : ");

    for(int j = 0 ; j < array.length - i ; ++j){
        System.out.print(array[j][j+i] + " ");
    }
    if(i!=0){
        System.out.print("\nDiagonal[0][" + i + "] : ");

        for(int j = 0 ; j < array.length - i ; ++j){
            System.out.print(array[j][j+i] + " ");
        }
    }
} 

Resultado:

Diagonal[0][0] : 0 0 0 0

Diagonal[1][0] : 1 1 1

Diagonal[0][1] : 1 1 1

Diagonal[2][0] : 2 2

Diagonal[0][2] : 2 2

Diagonal[3][0] : 3

Diagonal[0][3] : 3

Podes retirar um ciclo for em função do problema em questão, eu como queria mostrar na consola dos valores da diagonal teve de ser assim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

oi gnomoamorim

ta ai qualquer coisa a falhar... tenta mudar os valores do array tem qualquer coisa a bater mal...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A mim parece-me bem  :hmm:

Pensando de outro modo, uma matriz 4x4 tem estas posições:

(0,0) (0,1) (0,2) (0,3)

(1,0) (1,1) (1,2) (1,3)

(2,0) (2,1) (2,2) (2,3)

(3,0) (3,1) (3,2) (3,3)

Mudando só o output:

int[][] array = {{0, 1, 2, 3}, 
                 {1, 0, 1, 2},
                 {2, 1, 0, 1},
                 {3, 2, 1, 0}};

for(int i = 0 ; i < array.length ; ++i){

    System.out.print("\nDiagonal : ");

    for(int j = 0; j < array.length - i ; ++j){
        System.out.print("([" + j + "," + (j+i) + "])");
    }
    if(i!=0){
        System.out.print("\nDiagonal : ");

        for(int j = 0 ; j < array.length - i ; ++j){
            System.out.print("([" + (j+i) + "," + j + "])");
        }
    }
} 

Dá isto:

Diagonal : ([0,0])([1,1])([2,2])([3,3])

Diagonal : ([0,1])([1,2])([2,3])

Diagonal : ([1,0])([2,1])([3,2])

Diagonal : ([0,2])([1,3])

Diagonal : ([2,0])([3,1])

Diagonal : ([0,3])

Diagonal : ([3,0])

Vê lá se não é o que querias :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora