Como ler uma matriz?

17 respostas
F
for(i =1; i<=p.length -1; i++){
            for(int j =1;j<=p.length -1; j++){
           
            System.out.println("Qual o valor do " +i +  " elemento da linha?");
             p[i][j]=ler.nextInt();
             System.out.println("Qual o valor do " +j +  " elemento da coluna?");
             p[i][j]=ler.nextInt();
            }
            
            }

Eu sei que pela lógica, esse código vai mostrar
Qual o valor do 1 elemento da linha?

Qual o valor do 1 elemento da coluna?

Qual o valor do 1 elemento da linha?

Mas não estou sabendo como consertar isso.

Suspeito desse p[i][j]=ler.nextInt(). Na primeira lida ele tem que ler na posição p[i] [j]e na segunda tbm?
Estou com dificuldade de me orientar nessa matriz.

17 Respostas

Raff

amigo você quer ler a matrix inteira ??
não entendi o que você quis dizer !!!

F

Ler uma matriz 4x5.

Primeiro, eu coloquei um for pra ler as linhas e outro for, pras colunas. Mas está acontecendo esse problema aí.

B
  1. for(i =1; i<=p.length -1; i++){
  2. for(int j =1;j<=p.length -1; j++){
    
  3. System.out.println("Qual o valor do " +i +  " elemento da linha?");
    
  4. p[i][j]=ler.nextInt();
    
  5. System.out.println("Qual o valor do " +j +  " elemento da coluna?");
    
  6. p[i][j]=ler.nextInt();
    
  7. }
    
  8. }
    

bom, é o seguinte, este codigo seu esta imprimindo todos os valores duas vezes, vc não precisa colocar uma legenda para ler os valores de i e nem os valores de j.

lembre-se que em uma matriz sempre vai ter duas posições, a da linha e a da coluna. i e j

e do jeito que vc colocou primeiro ele vai ler todos os elementos de uma linha, ai pula para linha de baixo e lê todos até acabar de andar por toda matriz, mas a sua duvida ainda não sei qual é.

Andre_Brito

cara, eu pensei assim:

i = linha, j = coluna. Em ambos os for que você está fazendo, você teria que ler primeiro todos os valores da primeira linha. P. ex, a matriz 1 2 3 \n 4 5 6. No for, você teria que dizer: digite o numero da j coluna. Daí ia lá e colocava o 1, o for incrementa e vai pra segunda coluna, mas tudo isso na primeira linha. Depois, você faz a mesma coisa com a linha de baixo, só que o for do i já vai estar incrementado.

Acho que seu erro é só de lógica.

Edit;

Se você quiser falar pro usuário: Digite o número correspondente na linha i e na coluna j, você teria inserir primeramente na primeira linha, em todas as colunas, depois na segunda linha e em todas as colunas, e assim por diante. Se ele quiser alterar algum valor, você pergunta: “Qual a posição na matriz que deve ser alterada?”, e lê dois valores. Aí, você decrementa cada um deles (i-- e j–), porque ele vai colocar pensando que a primeira posição de cada é 1. Aí muda. Perae que já coloco algum código aqui.

F

Eu só estou querendo ler a matriz. A dúvida é essa.

Eu tenho que fazer dois for, do jeito que coloquei, certo?
O método(a maneira) de leitura é essa?
p[i][j]=ler.nextInt();

p= posição
i=a linha
j= a coluna.

Andre_Brito

p não é sua posição, mas sim o nome da sua matriz. As variáveis "i" e "j" é quem são as posições.

Segue o código com a saída:

import java.util.Scanner;

public class Matriz
{
    
    public static void main(String[] args) {
        int[][] matriz = new int[5][5];
        Scanner leitor = new Scanner(System.in);
        
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print("Digite o elemento da linha " + (i + 1) + " da coluna " + (j + 1) + ": ");
                matriz[i][j] = leitor.nextInt();
                System.out.println("");
            }
        }
        
        System.out.println("Agora, apresentando a matriz\n\n");
        
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                System.out.print(matriz[i][j] + "   ");
            }
            System.out.println("");
        }
        
        System.out.println("Fim");
        
        
    }

}

Agora, a saída:

Digite o elemento da linha 1 da coluna 1: 1

Digite o elemento da linha 1 da coluna 2: 2

Digite o elemento da linha 1 da coluna 3: 3

Digite o elemento da linha 1 da coluna 4: 4

Digite o elemento da linha 1 da coluna 5: 5

Digite o elemento da linha 2 da coluna 1: 5

Digite o elemento da linha 2 da coluna 2: 10

Digite o elemento da linha 2 da coluna 3: 15

Digite o elemento da linha 2 da coluna 4: 20

Digite o elemento da linha 2 da coluna 5: 25

Digite o elemento da linha 3 da coluna 1: 1

Digite o elemento da linha 3 da coluna 2: 2

Digite o elemento da linha 3 da coluna 3: 3

Digite o elemento da linha 3 da coluna 4: 4

Digite o elemento da linha 3 da coluna 5: 5

Digite o elemento da linha 4 da coluna 1: 5

Digite o elemento da linha 4 da coluna 2: 10

Digite o elemento da linha 4 da coluna 3: 15

Digite o elemento da linha 4 da coluna 4: 20

Digite o elemento da linha 4 da coluna 5: 25

Digite o elemento da linha 5 da coluna 1: 1

Digite o elemento da linha 5 da coluna 2: 2

Digite o elemento da linha 5 da coluna 3: 3

Digite o elemento da linha 5 da coluna 4: 4

Digite o elemento da linha 5 da coluna 5: 5

Agora, apresentando a matriz

1 2 3 4 5
5 10 15 20 25
1 2 3 4 5
5 10 15 20 25
1 2 3 4 5
Fim

Desculpa ele ser tão grande. Eu deveria ter diminuído o número.
Abraço.

Raff

faz assim cara !!!

int[][] arraysInt = new int[4][];


for(int[] x : arraysInt){

	
for(int gu : x){

Sytem.out.println(gu);
		
}
}
Raff

Observação: eu não preenchi o array… Por favor note isso !

F

A partir do que vcs disseram, eu fiz assim

for(int i=0; i<5; i++){
              for(int j=0; j<5; j++){
           
            System.out.println("Qual o valor da linha " +(i+1) + 
            	 " da coluna " + (j+1) + "?");
             matriz[i][j]=ler.nextInt();
              

               }
            }

Dá Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Matriz.main(Matriz.java :18 )

Podem dizer por que ele alcança uma posição que não existe?

Já assim dá certo:

for(int i=0; i < matriz.length; i++){
              for(int j=0; j < matriz.length; j++){
           
            System.out.println("Qual o valor da linha " +(i+1) +  " da coluna " + (j+1) + "?");
             matriz[i][j]=ler.nextInt();
              

               }
            }

>

F

Esse arraysInt do exemplo, eu não entendi.

Andre_Brito

Ele apresenta aquele erro porque o programa tenta acessar (com o for) uma posição da matriz que não existe. Por exemplo, qual o tamanho que você definiu? Provavelmente foi um valor menor que 4 e no for ele tenta acessar o quarto elemento (o último, ou o quinto, na visão do usuário).

Andre_Brito

O arraysInt que ele fez é o nome da matriz, que na verdade está correto. Uma matriz é um array bidirecional. O for que ele fez é chamado de for-each e é uma maneira de percorrer uma coleção sem saber a quantidade de elementos que o mesmo possui. Acho que se você está começando com programação em si (não só em Java), entenda primeiro como funciona o for “Normal”. Você atribui um valor inicial, faz um while e define o incremento… se você buscar na internet você acha algumas coisas melhores explicadas.

W

eu faria assim…

import java.util.Scanner;

public class Matriz {

public static void main(String[] args) {

int[][] matriz = new int[3][3];
Scanner leitor = new Scanner(System.in); 
	
	for (int i = 0; i < matriz.length; i++){ 
		for (int j = 0; j < matriz[0].length; j++){ 
			System.out.print("Digite o elemento da linha " + (i + 1) + " da coluna " + (j + 1) + ": "); 
			matriz[i][j] = leitor.nextInt(); System.out.println(""); 
		} 
	}
	System.out.println("Agora, apresentando a matriz\n\n"); 
	for (int i = 0; i < matriz.length; i++) { 
		for (int j = 0; j < matriz[0].length; j++) {
			System.out.print(matriz[i][j] + " ");
		} 
		System.out.println(""); 
	}
}
peczenyj

seria interessante algo assim:

entre com a matriz: {{1,2,3},{4,5,6},{7,8,9}}

depois seria o caso de abrir essa string e analisar elemento a elemento, montando um array de acordo com o que vc quer.

Complicado?

entre com a matriz: 1,2,3 ; 4,5,6 ; 7,8,9

W

sinceramente não entendi o que você quis dizer…

A

xzcvzxcv

Andre_Brito

O que ele quis dizer é entrar com uma matriz, mas ler como uma String. Depois ir separando conforme os “;” vão aparecendo e inserindo nos arrays.

Criado 23 de dezembro de 2007
Ultima resposta 4 de jan. de 2008
Respostas 17
Participantes 7