Matriz em java (ajuda) (RESOLVIDO)

22 respostas
A

Olá, estou com dúvida nesse exercicio, a questão é: Ler duas matrizes A e B do tipo vetor com 15 elementos cada. Construir uma matriz C, sendo esta a junção das duas outras matrizes. Desta forma, C deverá ter o dobro de elementos, ou seja, 30. Apresentar a matriz C.

A minha dúvida é na hora de colocar as matrizes A e B dentro da matriz C, quem poder mim ajudar, agradeço muito. Fiz dessa maneira ai abaixo, mas está dando erro, acredito ser mesmo na junção das matrizes.

double a [] = new double [15];
 double b [] = new double [15];
 double c [] = new double [30];
 String snum,g,s= "";
 double num, num1;

 for (int i=0;i<a.length;i++)
 {
  snum = JOptionPane.showInputDialog("digite o valor da matriz A");
  num = Double.parseDouble(snum);
  a[i] = num;
 }

      for (int i=0;i<b.length;i++)
 {
  g = JOptionPane.showInputDialog("digite o valor da matriz B");
  num1 = Double.parseDouble(g);
  b[i] = num1;
 }

 for (int i=0;i<c.length;i++)
  {
      c[i] = a[i];
      c[i] = b[i];
  }

 for (int i=0;i<c.length;i++)
  {
   s= s+ c[i]+" ";
  }

 JOptionPane.showMessageDialog(null, s);

}

}

22 Respostas

S

[/code]for (int i=0;i {
c[i] = a[i];

}[code]
faça um for e guarde a posição que ele acabou

logo faça outro for e acrescente +1 da posição que o for acima parou

A

não entendi, poderia ser mais claro por favor. Grata

drsmachado

Antes de mais nada, uma dica http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor.

Então, este trecho não irá funcionar

for (int i=0;i<c.length;i++) 
{ 
c[i] = a[i]; 
c[i] = b[i]; 
}

Pois quando chega no i = 15 a e b não possuem valor, pois são matrizes menores (0 a 14).
É preciso usar 2 for. No segundo, somar ao valor do contador o número de casas que c possui preenchidas

for(int e = 0; e < a.length;e++){
   c[e] = a[e];
  }

  for(int d = 0; d < b.length; d++){
  c[d + 15] = b[d];
}
S

eu faria com dois for, porem nao somando d+15, pois a cada loop ele somaria e eu acho que estoraria o vetor

for(int e = 0; e < a.length;e++){

c[e] = a[e];

}

d = e;
d +=1;

for(int f = d; f < b.length; f++){
c[f] = b[f];

drsmachado

SilverHawk:
eu faria com dois for, porem nao somando d+15, pois a cada loop ele somaria e eu acho que estoraria o vetor

for(int e = 0; e < a.length;e++){

c[e] = a[e];

}

d = e;
d +=1;

for(int f = d; f < b.length; f++){
c[f] = b[f];

Amigo, c[30] indica que o vetor de c possui 30 “espaços” na memória.
Quando o primeiro for finaliza, os “espaços” preenchidos da matriz c vão do 0 ao 14…
Se você pegar e fizer como sugeriu, você apenas sobrescreve as “casas” 0 a 14 e não preencherá as de 15 a 29, como deveria.
Até onde sei, 0 + 15 = 15 e 14 + 15 = 29, exatamente o que precisamos para completar a matriz c com as matrizes a e b

Testa aí e me diz

A

Fiz essa alteração, agora para imprimir o resultado, eu coloco pra escrever c[d] ou c[i]?

drsmachado

Para imprimir, tanto faz

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

ou

for(int d = 0; d < c.length; d++

é indiferente

S

nossa drsmachada… verdade! foi malz! erro de logica rsrs

ana, voce precisa imprimir a matriz de junção em um novo for…

A

fiz a alteração, porem não imprime o resultado da duas matrizes, o código ficou assim:

double a [] = new double [3];
 double b [] = new double [3];
 double c [] = new double [6];
 String snum,g,s= "";
 double num, num1;
 int d,e;

 for (int i=0;i<a.length;i++)
 {
  snum = JOptionPane.showInputDialog("digite o valor da matriz A");
  num = Double.parseDouble(snum);
  a[i] = num;
 }

      for (int i=0;i<b.length;i++)
 {
  g = JOptionPane.showInputDialog("digite o valor da matriz B");
  num1 = Double.parseDouble(g);
  b[i] = num1;
 }

 for(e = 0; e < a.length;e++){
  c[e] = a[e];
  }
d = e;
d +=1;

for(int f = d; f < b.length; f++){
c[f] = b[f];

for (int i=0;i<c.length;i++)
  {
   s= s+ c[i]+" ";
  }

 JOptionPane.showMessageDialog(null,s);

}}}
ViniGodoy

Ana Luiza… dica (de novo):
http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

S

sim ele nao imprime mesmo… coloque um System.out.printf dentro do ultimo for para exibir o onteudo de cada indice da matriz c

A

Obrigada pela dica de como colar o codigo, eu não sabia.

A

Coloquei, mas continua sem imprimir, vou tentar algo aqui

S
for (int i=0;i<c.length;i++)
{
   System.out.printf("Valor: %d", c[i]);
}

assim voce fez?

ViniGodoy
Resposta super eficiente mas provavelmente não esperada pelo seu professor:
int a[] = {10,20,30,40,50};
int b[] = {1,2,3,4,5};
int c[] = new int[a.length + b.length];

System.arrayCopy(a, 0, c, 0, a.length);
System.arrayCopy(b, 0, c, a.length+1, b.length);
Vingdel

Bom Dia, Ana!

Para juntar A com B faça assim:

Com base no seu código inicial, substitua: c[i] = a[i]; c[i] = b[i];por: if(i< a.length) c[i] = a[i]; else c[i] = b[i - a.length];Ao meu ver somente isso precisa mudar.

Veja como fica e confirme para nós se precisa mudar algo ou deu algo de errado.

Abraço!

drsmachado

Vingdel:
Bom Dia, Ana!

Para juntar A com B faça assim:

Com base no seu código inicial, substitua:for (int i=0;i<c.length;i++) { c[i] = a[i]; c[i] = b[i]; }por:for (int i = 0; i < c.length; i++){ if(i< a.length) c[i] = a[i]; else c[i] = b[i - a.length]; }Ao meu ver somente isso precisa mudar.

Veja como fica e confirme para nós se precisa mudar algo ou deu algo de errado.

Abraço!


E toda vez, faz um if/else…
Em termos de programação, a coisa mais lenta que existe é um if dentro de um for…

Vingdel

drsmachado:
E toda vez, faz um if/else…
Em termos de programação, a coisa mais lenta que existe é um if dentro de um for…

Uia, bom saber!

Então Ana, não escute o Vingdel.

E vendo melhor o tópico, uma outra solução foi dada que é o uso de dois for, porém eu os faria assim:

for(int i = 0; i < a.length; i++) c[i] = a[i]; for(int i = 0; i < b.length; i++) c[i + a.length] = b[i];ou

for(int i = 0; i < a.length; i++) c[i] = a[i]; for(int i = a.length; i < c.length; i++) c[i] = b[i - a.length];

Peço tua opinião drsmachado.

Obrigado pela correção quanto ao IF dentro de FOR.

A

Muito obrigada pela ajuda de vcs todos, em especial ao Vingdel, deu certinho seu codigo, alterei onde mim informou e funcionou perfeitamente. Vou aprender colocar o código aqui no forum, e coloco finalmente como ficou.

Grata.

A

Olá pessoal, tô aqui matutando em uns programas com matrizes, após a grande ajuda de vcs nesse programa anterior, tentei agora fazer a junção de 3 matrizes numa 4ª, mas está dando um erro, se alguem poder mim ajudar eu agradeço.

Questão: Ler três matrizes (A, B e C) de uma dimensão com 5 elementos cada. Construir uma matriz D, sendo esta a junção das três outras matrizes. Desta forma D deverá ter o triplo de elementos, ou seja, 15. Apresentar os elementos da matriz D.

Li as 3 matrizes,e na junção fiz assim:

for(int i = 0; i < a.length; i++)   {
    d[i] = a[i];   }
for(int i = a.length; i < d.length; i++)  {
    d[i] = b[i - a.length];}
for(int i = a.length; i < d.length; i++)  {
    d[i] = c[i - b.length];
   }

Mas está dando um erro.

Vingdel

Ana Luiza, edita sua mensagem. A / é na TAG do final do código, na tab do início não tem / .

fica assim:

código aqui

Até mais!

Vingdel

Ana, você precisa entender a lógica:

for(int i = 0; i < a.length; i++) d[i] = a[i]; for(int i = a.length; i < (d.length - c.length); i++) d[i] = b[i - a.length]; for(int i = (d.length - c.length); i < d.length; i++) d[i] = c[i - (d.length - c.length)];ouint t = 0; int iJuncao = 0; while(t < a.length) d[iJuncao++] = a[t++]; t = 0; while(t < b.length) d[iJuncao++] = b[t++]; t = 0; while(t < c.length) d[iJuncao++] = c[t++]; t = 0;
Fiz assim de outro jeito para ver se você consegue entender também. Mas procure entender a lógica de ambos, principalmente a usada no for.

Ahhh, só mais um pedido, para o tópico ficar bonito, edite as suas outras postagens e ponha os códigos entre as TAGS, principalmente a primeira postagem. Te agradeço por isso.

Até mais!

Criado 7 de junho de 2011
Ultima resposta 8 de jun. de 2011
Respostas 22
Participantes 5