Preciso fazer um programinha que leia uma matriz 20x20(negociavel) e que inform se é simetrica ou não. Eu fiz o seguinte.
importjava.util.Scanner;publicclassEx009{publicstaticScannerentr=newScanner(System.in);publicstaticintmenu(Scannerentr){System.out.println("1 - Determinar se a matriz é simétrica ");System.out.println("0 - sair");returnentr.nextInt();}publicstaticvoidsimetrica(int[][]matriz,intlinhas){inti,j,colunas;colunas=linhas;for(i=0;i<linhas;i++){for(j=i+1;j<colunas;j++){if(matriz[i][j]!=matriz[j][i])break;}if(j<colunas)break;}System.out.println();if(i<linhas)System.out.println("A Matriz não é simétrica");elseSystem.out.println("A Matriz é simétrica");}publicstaticvoidmain(String[]args){inti,j,colunas,linhas,menu;System.out.println("Informe o número de linhas ( = número de colunas)");linhas=entr.nextInt();colunas=linhas;System.out.println("Informe os números que constituem as linhas da matriz");intmatriz[][]=newint[linhas][colunas];for(i=0;i<linhas;i++)for(j=0;j<colunas;j++)matriz[i][j]=entr.nextInt();for(i=0;i<linhas;i++){for(j=0;j<colunas;j++){System.out.print(matriz[i][j]+" ");}System.out.println();}System.out.println();while((menu=menu(entr))!=0){switch(menu){case0:break;case1:simetrica(matriz,linhas);break;default:System.out.println("Ação inválida");}}}}
O que vocês mudariam? Acrescentariam?
Sei que tem outras formas mais simples, mais rápida e menor do que o exemplo acima.
Opiniões e criticas são bem vindas, ajuda no apredizado.
Normalmente, dentro da medida do possível, é bom separar a impressão da obtenção dos resultados. Por exemplo, você poderia fazer algo assim:
publicstaticbooleanehSimetrica(int[][]matriz,intlinhas){intcolunas=linhas;for(inti=0;i<linhas;++i){for(intj=0;j<colunas;++j){if(matriz[i][j]!=matriz[j][i]){returnfalse;}}}returntrue;}publicstaticvoidsimetrica(int[][]matriz,intlinhas){if(ehSimetrica(matriz,linhas)){System.out.println("A Matriz não é simétrica");}else{System.out.println("A Matriz é simétrica");}}
Isso tem a vantagem de deixar seu código mais legível e menos "linguição".
serjones
thingol:
Normalmente, dentro da medida do possível, é bom separar a impressão da obtenção dos resultados. Por exemplo, você poderia fazer algo assim:
publicstaticbooleanehSimetrica(int[][]matriz,intlinhas){intcolunas=linhas;for(inti=0;i<linhas;++i){for(intj=0;j<colunas;++j){if(matriz[i][j]!=matriz[j][i]){returnfalse;}}}returntrue;}publicstaticvoidsimetrica(int[][]matriz,intlinhas){if(ehSimetrica(matriz,linhas)){System.out.println("A Matriz não é simétrica");}else{System.out.println("A Matriz é simétrica");}}
Isso tem a vantagem de deixar seu código mais legível e menos "linguição".
Obrigado pelo retorno. Já fiz a alteração e anotei a dica no caderno.
Ao ler o exercicio novamente vi que é melhor usar o RANDOM mas aida estou perdido.
B
Bruno_Laturner
serjones:
Obrigado pelo retorno. Já fiz a alteração e anotei a dica no caderno.
Ao ler o exercicio novamente vi que é melhor usar o RANDOM mas aida estou perdido.
Se você quiser preencher a tua matriz com dados aleatórios até dá, mas vai ser difícil ela ficar simétrica assim
Aliás, o que é simetria de uma matriz?
serjones
Bruno Laturner:
serjones:
Obrigado pelo retorno. Já fiz a alteração e anotei a dica no caderno.
Ao ler o exercicio novamente vi que é melhor usar o RANDOM mas aida estou perdido.
Se você quiser preencher a tua matriz com dados aleatórios até dá, mas vai ser difícil ela ficar simétrica assim
Aliás, o que é simetria de uma matriz?
Exemplo de uma matriz simétrica:
0 1 0
1 0 1
1 1 0
Isso ai em cima é uma matriz simétrica.
serjones
Bruno Laturner:
serjones:
Obrigado pelo retorno. Já fiz a alteração e anotei a dica no caderno.
Ao ler o exercicio novamente vi que é melhor usar o RANDOM mas aida estou perdido.
Se você quiser preencher a tua matriz com dados aleatórios até dá, mas vai ser difícil ela ficar simétrica assim :)
Aliás, o que é simetria de uma matriz?
Bruno,
Na verdade no Random rola matriz simétrica sim, da uma olhada neste exemplo. Só falta colocar o metodo para imprimir e o Random.