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.
doublea[]=newdouble[15];doubleb[]=newdouble[15];doublec[]=newdouble[30];Stringsnum,g,s="";doublenum,num1;for(inti=0;i<a.length;i++){snum=JOptionPane.showInputDialog("digite o valor da matriz A");num=Double.parseDouble(snum);a[i]=num;}for(inti=0;i<b.length;i++){g=JOptionPane.showInputDialog("digite o valor da matriz B");num1=Double.parseDouble(g);b[i]=num1;}for(inti=0;i<c.length;i++){c[i]=a[i];c[i]=b[i];}for(inti=0;i<c.length;i++){s=s+c[i]+" ";}JOptionPane.showMessageDialog(null,s);}
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
eu faria com dois for, porem nao somando d+15, pois a cada loop ele somaria e eu acho que estoraria o vetor
for(inte=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(inte=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
ana_luiza1
Fiz essa alteração, agora para imprimir o resultado, eu coloco pra escrever c[d] ou c[i]?
drsmachado
Para imprimir, tanto faz
for(inti=0; i < c.length; i++)
ou
for(intd=0; d < c.length; d++
é indiferente
S
SilverHawk
nossa drsmachada… verdade! foi malz! erro de logica rsrs
ana, voce precisa imprimir a matriz de junção em um novo for…
A
ana_luiza1
fiz a alteração, porem não imprime o resultado da duas matrizes, o código ficou assim:
doublea[]=newdouble[3];doubleb[]=newdouble[3];doublec[]=newdouble[6];Stringsnum,g,s="";doublenum,num1;intd,e;for(inti=0;i<a.length;i++){snum=JOptionPane.showInputDialog("digite o valor da matriz A");num=Double.parseDouble(snum);a[i]=num;}for(inti=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;
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
ana_luiza1
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
ana_luiza1
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.
Ana Luiza, edita sua mensagem. A / é na TAG do final do código, na tab do início não tem / .
fica assim:
códigoaqui
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.