Vetor bidimensional. Duvida

33 respostas
cristianequeiroz1

Tenho o seguinte problema que nao to conseguindo resolver…

O codigo tem que ler duas matrizes de 7 elementos. Tenho que construir uma matriz C com duas dimensoes: a primeira coluna tera todos os dados digitados na matriz A e a segunda coluna na matriz B.

O que esta errado no codigo??

import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[][] = new int[7][1];
         int B[][] = new int[7][1];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
        	  for (int j = 0; j < 1; j++){
        		  A[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor A ["   + i + "] [ "+j+" ] "));  
              }  
          
         }   
        
         for (int i = 0; i < 7; i++) {  
             for (int j = 0; j < 1; j++) {  
                B[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor B ["+ i + "] [ "+j+" ] "));  
             }  
          }  
         for (int i = 0; i < 7; i++) {  
             for (int j = 0; j < 2; j++) {  
                 C [i][j]= A[i][j] ; 
                 C[i][j] = B[i][j]  ;                 
      }        
  }  
         for (int i = 0; i < 7; i++) {  
             for (int j = 0; j < 1; j++) {  
                 System.out.print(C [i][j]+" ");                
      }     
             System.out.print("\n");  
  }  
        
  }  
}

33 Respostas

thegoergen

for (int i = 0; i < 7; i++) { for (int j = 0; j < 2; j++) { C [i][j]= A[i][j] ; C[i][j] = B[i][j] ; }

Aqui você está setando 2 valores na posição C[i][j], enào só o segundo irá aparecer… Você precisa percorrer todas as matrizes A e B, e setar o valor na C, não o contrário

cristianequeiroz1

eu tenho que fazer assim: A[i][j] = C[i]?

GustavoLaguna

Não… tenta entender melhor o post do thegoergen. =)

Voce está passando valores dos dois vetores A e B para o mesmo elemento de C.

cristianequeiroz1

Tentei fazer assim mais teria que imprimir um do lado do outro…

import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[][] = new int[7][1];
         int B[][] = new int[7][1];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
        	  for (int j = 0; j < 1; j++){
        		  A[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor A ["   + i + "] [ "+j+" ] "));  
              }  
          
         }   
        
         for (int i = 0; i < 7; i++) {  
             for (int j = 0; j < 1; j++) {  
                B[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor B ["+ i + "] [ "+j+" ] "));  
             }  
          } 
         String AC ="";
         for (int i = 0; i < 7; i++) {  
             for (int j = 0; j < 1; j++) {  
                 C [i][j]= A[i][j] ; 
            AC += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";                  
      }        
  }  
         String BC="";
         for (int i = 0; i < 7; i++) {  
             for (int j = 0; j < 1; j++) {  
                 C [i][j]= B[i][j] ; 
            BC += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";                  
      }        
  }  
   
     	
 		JOptionPane.showMessageDialog(null,AC);
 		JOptionPane.showMessageDialog(null,BC);
     }
     }
thegoergen

Olhei melhor o código e reparei em algo: porque você usa matrizes para o A e B?? Se eles só tem uma “linha” mesmo… Pode Usar Vetor unidimensional:

String[] A = new String[7];
String[] B = new String[7];
String[][] C = new String[7][2];

ACho que ifcaria bem mais simples

GustavoLaguna

Voce pode efetuar a atribuição e depois a impressão dos mesmo lado a lado.

Voce não precisa e 2 for, para o array A voce utiliza a coluna 0 de C, e para o array B voce utiliza a coluna 1 de C.

zwingli
Vc tem que usar apenas um jogo de looping duplofor a{

for b{

multi(a,b) = Entre com o valor de a,b…

}

}

Este cara já preenche completamente a matriz bidimensional.

Sendo a (1…2) e b (5…6) na tela vc terá:

Entre com o valor de 1,5
Entre com o valor de 1,6
Entre com o valor de 2,5
Entre com o valor de 2,6

E pronto!

cristianequeiroz1

Isso que eu consigo entender:

Como faço pra colocar na coluna 0 de C os valores de A…

C[0] = A[i]?

thegoergen

cristianequeiroz1:
Isso que eu consigo entender:

Como faço pra colocar na coluna 0 de C os valores de A…

C[0] = A[i]?


Isso mesmo!

GustavoLaguna

Da pra melhorar bastante esse código ainda…

import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[] = new int[7];
         int B[] = new int[7];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
		A[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor A [" + i + "]"));  
          
         }   
        
         for (int i = 0; i < 7; i++) {         
                B[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor B ["+ i + "]"));  
         } 
         
	 for (int i = 0; i < 7; i++) {
		C[i][0] = A[i];
		C[i][1] = B[i];
	 } 

	 for (int i = 0; i < 7; i++) {
		for(int j = 0; j < 2; j++) {
	 		System.out.println("C["+i+"]["+j+"] = "+ C[i][j]);
		}
         }
     	
     }
}
GustavoLaguna

thegoergen:
cristianequeiroz1:
Isso que eu consigo entender:

Como faço pra colocar na coluna 0 de C os valores de A…

C[0] = A[i]?

for (int i = 0; i < A.length; i++){ C[0][i] = A[i]; }

Acho que tem que inverter…

for (int i = 0; i < A.length; i++){ C[i][0] = A[i]; } [/quote]

thegoergen
import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[] = new int[7];
         int B[] = new int[7];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
		A[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor A [" + i + "]"));  
          
         }   
        
         for (int i = 0; i < 7; i++) {         
                B[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor B ["+ i + "]"));  
         } 
         
		C[i][0] = A;
		C[i][1] = B;

	 for (int i = 0; i < 7; i++) {
		for(int j = 0; j < 2; j++) {
	 		System.out.println("C["+i+"]["+j+"] = "+ C[i][j]);
		}
         }
     	
     }
}
thegoergen

GustavoLaguna:
thegoergen:
cristianequeiroz1:
Isso que eu consigo entender:

Como faço pra colocar na coluna 0 de C os valores de A…

C[0] = A[i]?

for (int i = 0; i < A.length; i++){ C[0][i] = A[i]; }

Acho que tem que inverter…

for (int i = 0; i < A.length; i++){ C[i][0] = A[i]; }


[/quote]

Não precisa do FOR. Funciona setando direto o Array.

GustavoLaguna
C[i][0] = A;   
C[i][1] = B;

Certeza? Acho que isso não compila.

Voce está tentando colocar um array onde é esperado um int.

cristianequeiroz1

Nao consigo mandar imprimir… ai esta errado a atribuicao?

Olhem como esta:

import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[] = new int[7];
         int B[] = new int[7];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
 			String a = JOptionPane.showInputDialog(null, "Digite o valor A ["
 					+ i + "]");
 			A[i] = Integer.parseInt(a);
 		}
 		for (int i = 0; i < 7; i++) {
 			String b = JOptionPane.showInputDialog(null, "Digite o valor B ["
 					+ i + "]");
 			B[i] = Integer.parseInt(b);
 		}
 		  
 		    
 		 for (int i = 0; i < A.length; i++){  
 		 C[i][0] = A[i];  
 		 }  
 		
 		for (int i = 0; i < B.length; i++ ){
 			C[0] [i] = B[i];
 		}
 		
 		 String saida="";
 	      for (int i = 0; i < 7; i++) {  
 	         for(int j = 0; j < 2; j++) {  
 	        	saida += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";	  
 	         }  
 	         
 	          }  
 	     JOptionPane.showMessageDialog(null,saida);
  
 	      }  
 	 }
thegoergen

GustavoLaguna:
C[i][0] = A; C[i][1] = B;

Certeza? Acho que isso não compila.

Voce está tentando colocar um array onde é esperado um int.

Não assim. Assim:

C[0] = A;   
C[1] = B;

Coloco um array de int onde é esperado um array de int. Testei antes, e funcionou. :slight_smile:

jingle

GustavoLaguna:
C[i][0] = A; C[i][1] = B;

Certeza? Acho que isso não compila.

Voce está tentando colocar um array onde é esperado um int.

opa editei por que vi mal estava olhando como se foce assim como thegoergen pos

C[0] = A;     
    C[1] = B;
GustavoLaguna

thegoergen:
GustavoLaguna:
C[i][0] = A; C[i][1] = B;

Certeza? Acho que isso não compila.

Voce está tentando colocar um array onde é esperado um int.

Não assim. Assim:

C[0] = A;   
C[1] = B;

Coloco um array de int onde é esperado um array de int. Testei antes, e funcionou. :slight_smile:

acho que não é o ideal também, voce vai criar um array de 7 elementos onde era um array de 2.

é a mesma coisa que fazer

C[0] = new int[7];
C[1] = new int[7];
GustavoLaguna
cristianequeiroz1:
Nao consigo mandar imprimir... ai esta errado a atribuicao?

Olhem como esta:

import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[] = new int[7];
         int B[] = new int[7];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
 			String a = JOptionPane.showInputDialog(null, "Digite o valor A ["
 					+ i + "]");
 			A[i] = Integer.parseInt(a);
 		}
 		for (int i = 0; i < 7; i++) {
 			String b = JOptionPane.showInputDialog(null, "Digite o valor B ["
 					+ i + "]");
 			B[i] = Integer.parseInt(b);
 		}
 		  
 		    
 		 for (int i = 0; i < A.length; i++){  
 		 C[i][0] = A[i];  
 		 }  
 		
 		for (int i = 0; i < B.length; i++ ){
 			C[0] [i] = B[i];
 		}
 		
 		 String saida="";
 	      for (int i = 0; i < 7; i++) {  
 	         for(int j = 0; j < 2; j++) {  
 	        	saida += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";	  
 	         }  
 	         
 	          }  
 	     JOptionPane.showMessageDialog(null,saida);
  
 	      }  
 	 }

Cris, aqui está errado:

for (int i = 0; i < B.length; i++ ){   
            C[0] [i] = B[i];   
        }
invert... coloca
for (int i = 0; i < B.length; i++ ){   
            C[i] [1] = B[i];   
        }
cristianequeiroz1

to ficando doidinha ja!!!

olhem e que eu fiz:

for (int i = 0; i < A.length; i++){  
 		 C[0] = A;  
 		 }  
 		
 		for (int i = 0; i < B.length; i++ ){
 			C[1] = B;
 		}
 		
 		 String saida="";
 	      for (int i = 0; i < 7; i++) {  
 	         for(int j = 0; j < 2; j++) {  
 	        	saida += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";	  
 	         }  
 	         
 	          }  
 	     JOptionPane.showMessageDialog(null,saida);
  
 	      }  
 	 }

So que ele imprime errado…

thegoergen

cristianequeiroz1:
to ficando doidinha ja!!!

olhem e que eu fiz:

for (int i = 0; i < A.length; i++){  
 		 C[0] = A;  
 		 }  
 		
 		for (int i = 0; i < B.length; i++ ){
 			C[1] = B;
 		}
 		
 		 String saida="";
 	      for (int i = 0; i < 7; i++) {  
 	         for(int j = 0; j < 2; j++) {  
 	        	saida += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";	  
 	         }  
 	         
 	          }  
 	     JOptionPane.showMessageDialog(null,saida);
  
 	      }  
 	 }

So que ele imprime errado…

Se você vai usar

C[0] = A;

não precisa do FOR antes…

E o que imprime errado?? Você que imprima em colunas?? Mais bonitinho?? Porque ficou certo aqui…

GustavoLaguna

Voce fez algo meio doido ai msm…

voce está atribuindo o array A na posição 0 várias vezes e atribuindo o array B na posição 1 várias vezes…

olha os posts denovo… acho que sua questão está respondida… :slight_smile:

GustavoLaguna

thegoergen ,

a solução de colocar

C[0] = A;
C[1] = B;

não faz sentido se voce quiser colocar os valores de A na coluna 0 de C e valores de B na coluna 1 de C.

Nesse caso voce está colocando os valores de A na linha 0 de C e valores de B na linha 1 de C.

Sendo que o array C só tem 2 colunas por linha e voce está inserindo 7 colunas em cada linha, não vai dar certo.

pense no exemplo, C[3][0].

O que vai imprimir?

cristianequeiroz1

Fica assim entao???
Vou printar a tela e mandar pra vcs!

import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[] = new int[7];
         int B[] = new int[7];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
 			String a = JOptionPane.showInputDialog(null, "Digite o valor A ["
 					+ i + "]");
 			A[i] = Integer.parseInt(a);
 		}
 		for (int i = 0; i < 7; i++) {
 			String b = JOptionPane.showInputDialog(null, "Digite o valor B ["
 					+ i + "]");
 			B[i] = Integer.parseInt(b);
 		}
 		  
 		C[0]=A;
 		C[1]= B;
 		
 		 String saida="";
 	      for (int i = 0; i < 7; i++) {  
 	         for(int j = 0; j < 2; j++) {  
 	        	saida += "C[" +i+ "][" +j+ "]=" + C[i][j] + "\n";	  
 	         }  
 	         
 	          }  
 	     JOptionPane.showMessageDialog(null,saida);
  
 	      }  
 	 }
thegoergen

Cris!

Você está errando na hora de montar a String de saída, os FORS estão invertidos. Tenta isso aqui:

String saida="";
	    for (int i = 0; i < 2; i++) { // Primeiro o 2
		  for(int j = 0; j < 7; j++) { // Depois o 7
			saida += "" + C[i][j] + " "; // Coloca tudo numa linha
		  }
		  saida += "\n"; // Acabou isso, então começa uma nova linha
	    }

Assim vai ficar mais legível.

thegoergen

GustavoLaguna:
thegoergen ,

a solução de colocar

C[0] = A;
C[1] = B;

não faz sentido se voce quiser colocar os valores de A na coluna 0 de C e valores de B na coluna 1 de C.

Nesse caso voce está colocando os valores de A na linha 0 de C e valores de B na linha 1 de C.

Sendo que o array C só tem 2 colunas por linha e voce está inserindo 7 colunas em cada linha, não vai dar certo.

pense no exemplo, C[3][0].

O que vai imprimir?

Realmente estranho… mas funcionou :shock:

Tenho certeza, porque testei isso. Mas eu acho que a matriz tem 2 linhas e 7 colunas, não??

zwingli

Boa, mas coloca uma vírgula no final, pra separar…

saida += “” + C[i][j] + ", ";

GustavoLaguna

thegoergen ,

teu código funciona se

int[][] C = new int[2][7];

mas no exemplo tava

int[][] C = new int[7][2];
thegoergen

GustavoLaguna:
thegoergen ,

teu código funciona se

int[][] C = new int[2][7];

mas no exemplo tava

int[][] C = new int[7][2];

É verdade… eu fiz invertido… =)

Eu criei de um jeito, inverti para colocar os valores, e depois inverti para mostrar o resultado de novo… hehehhehe

O que importa é que o resultado final ficou bom! =)

public static void main(String arg[]) {
	    int A[] = new int[7];
	    int B[] = new int[7];
	    int C[][] = new int [7][2];
	    
	    for (int i = 0; i < 7; i++) {
		  A[i] = i;
	    }
	    for (int i = 0; i < 7; i++) {
		  B[i] = i+10;
	    }
	    
	    C[0] = A;
	    C[1] = B;
	    
	    String saida="";
	    for (int i = 0; i < 2; i++) {
		  for(int j = 0; j < 7; j++) {
			saida += "" + C[i][j] + " ";
		  }
		  saida += "\n";
	    }
	    JOptionPane.showMessageDialog(null,saida);
	    
	    
	    System.exit(0);
      }
GustavoLaguna

Agora sim! :thumbup:

cristianequeiroz1

Mais eu preciso imprimir em coluna…
ele ta imprimindo so em linha o que eu tenho que mudar?

GustavoLaguna
GustavoLaguna:
Da pra melhorar bastante esse código ainda...
import javax.swing.JOptionPane;   
class Exercicio8 {  
     public static void main(String arg[]) {  
         int A[] = new int[7];
         int B[] = new int[7];  
         int C[][] = new int [7][2];
         
         for (int i = 0; i < 7; i++) {
		A[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor A [" + i + "]"));  
          
         }   
        
         for (int i = 0; i < 7; i++) {         
                B[i][j] = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor B ["+ i + "]"));  
         } 
         
	 for (int i = 0; i < 7; i++) {
		C[i][0] = A[i];
		C[i][1] = B[i];
	 } 

	 for (int i = 0; i < 7; i++) {
		for(int j = 0; j < 2; j++) {
	 		System.out.println("C["+i+"]["+j+"] = "+ C[i][j]);
		}
         }
     	
     }
}

Não testei o código, mas deve funcionar assim.

thegoergen

cristianequeiroz1:
Mais eu preciso imprimir em coluna…
ele ta imprimindo so em linha o que eu tenho que mudar?

Você vai ter quer ver isso melhor… Realmente o código que eu fiz tem 2 linhas e 7 colunas… você vai ter que trocar esses valores.

É um ótimo teste para ver se sua “lógica com matrizes” está boa. :wink:

[EDIT]
Mas uma dica, você vai ter que tirar aquela parte de colocar os vetores inteiros sobre a matriz…

Tente mais uma vez, se mesmo assim não conseguir, poste aqui de novo

Criado 24 de abril de 2008
Ultima resposta 25 de abr. de 2008
Respostas 33
Participantes 5