Olá!
Sou novato aqui e em programação.
Estou com problema com exercício de vetores…
Leia dois vetores de 3 posições e calcule outro vetor contendo:
Nas posições pares os valores do primeiro vetor e nas posições impares os valores do segundo vetor.
public class Ex08 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int vetA[] = new int[3];
int vetB[] = new int[3];
int vetC[] = new int[6];
int a = 0, b = 0;
for(int i = 0; i < vetA.length; i++){
System.out.print("Digite o valor " + (i + 1) + " de " + vetA.length + " do vetor 1: ");
vetA[i] = in.nextInt();
}
for(int i = 0; i < vetB.length; i++){
System.out.print("Digite o valor " + (i + 1) + " de " + vetB.length + " do vetor 2: ");
vetB[i] = in.nextInt();
}
for(int i = 0; i < vetC.length; i++){
if(vetC[i] % 2 == 0){
vetC[i] = vetA[a];
a++;
}
if(vetC[i] % 2 != 0){
vetC[i] = vetB[i];
b++;
}
}
for(int i = 0; i < vetC.length; i++){
System.out.print(vetC + ", ");
}
}
Bem, você esqueceu de especificar no seu post qual o erro que está dando. Mas eu quebro essa pra você:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
Certo… o que isso significa?
O erro ArrayIndexOutOfBounds tem a tradução (quase literal) “Index do Array fora dos limites”.
Isso significa que o array que você tá instanciando tá recebendo valores fora do escopo definido. Se você definiu, por exemplo, 8 como limite, ele vai de 0-7, abrangendo as 8 posições.
Alguma interação sua está excedendo os limites do array… agora, o que pode ser? Tenta arrumar e me diz (:
DICA: O que está quebrando não é o seu Array C, e sim quantas vezes você está forçando os arrays A e B a rodarem! Se eles tem limite 3, como podem rodar 4, 5 ou 6 vezes?
No vetA, pro exemplo, tem limite 3. Isso significa:
vetA[0], vetA[1], vetA[2].
Sabendo disso, não existe
vetA[4], vetA[5], vetA[6].
NOTA: TENTE RESOLVER SOZINHO! USE O COMENTÁRIO ACIMA COMO REFERÊNCIA, E CASO NÃO CONSIGA, CONSULTE O CÓDIGO ABAIXO!
SÉRIO! Aprender a programar envolve prática. Copiar e colar transforma você no famoso Programador Orientado a StackOverFlow e você com certeza não quer isso
Ou, se você realmente estiver com dificuldade de entender, esse código aqui deve te ajudar. Lembre-se: um vetor começa na posição 0, mas o usuário pode achar que começa na primeira posição, fazendo com que seu código fique errado. Como alterar isso? Aí é com você.
[]'s!
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int vetA[] = new int[3];
int vetB[] = new int[3];
int vetC[] = new int[6];
for(int i = 0; i < vetA.length; i++){
System.out.print("Digite o valor " + (i + 1) + " de " + vetA.length + " do vetor 1: ");
vetA[i] = in.nextInt();
}
for(int i = 0; i < vetB.length; i++){
System.out.print("Digite o valor " + (i + 1) + " de " + vetB.length + " do vetor 2: ");
vetB[i] = in.nextInt();
}
for(int i = 0, j = 0, k = 0; i < vetC.length; i++){
if(i%2==0){
vetC[i]=vetA[j++];
}else{
vetC[i]=vetB[k++];
}
}
for(int i = 0; i < vetC.length; i++){
System.out.print(vetC[i] + " ");
}
}
}
O erro era esse mesmo, realmente esqueci de mencionar no tópico…
Bom fiz do meu jeito aqui e deu certo… valeu pela dica…
PS: Se tiver algo que vc considere “gambiarra” no meu código e quiser me dar um toque para eu nunca fazer… fique a vontade…
Algo errado sobre indentação também é valido!
/* Leia dois vetores de 20 posições e calcule outro vetor contendo:
Nas posições pares os valores do primeiro vetor e nas posições impares os valores do segundo vetor. */
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int vetA[] = new int[3];
int vetB[] = new int[3];
int vetC[] = new int[6];
int a = 0, b = 0;
for(int i = 0; i < vetA.length; i++){
System.out.print("Digite o valor " + (i + 1) + " de " + vetA.length + " do vetor 1: ");
vetA[i] = in.nextInt();
}
for(int i = 0; i < vetB.length; i++){
System.out.print("Digite o valor " + (i + 1) + " de " + vetB.length + " do vetor 2: ");
vetB[i] = in.nextInt();
}
for(int i = 0; i < vetC.length; i++){
if(i % 2 == 0){
vetC[i] = vetA[a];
a++;
}else{
vetC[i] = vetB[b];
b++;
}
}
for(int i = 0; i < vetC.length-1; i++){
System.out.print(vetC[i] + ", ");
}
System.out.println(vetC[5] + ". ");
}
É isso aí, cara! Muito legal! Seu código tá certinho. Uma prática que você pode adotar é a incrementação da variável durante uma operação. Como assim? Vou te mostrar.
Eles são exatamente o mesmo código. A diferença é que to incrementando (ou seja, acrescendo, dando o “++”) durante a operação.
Mas pode isso? Pode sim! Só se deve tomar cuidado com a posição do ++. Se você coloca antes da variável, ele “ACRESCE e depois executa a operação”. Se coloca na frente, ele EXECUTA A OPERAÇÃO e depois acresce. Por exemplo:
int i=0
sout(i++);
sout(i);
Isso vai me retornar:
0
1
Isso por que o sout(i++); EXECUTOU (no caso, printou na tela) antes de ACRESCER (:
Mas se eu fizesse:
int i=0
sout(++i);
sout(i);
Ele me retornaria:
1
1
Isso por que o sout(++i); ACRESCEU antes de EXECUTAR (no caso, printar no console)
Apenas uma dica para vc ir estudando, ao usar a classe Scanner, cuidado com os métodos, netxInt, nextFloat, nextDouble, etc…
Isso pq ela possui um “bug” de buffer (dados enfileirados em memória, coisas assim…) e dependendo do uso, pode gerar comportamento inesperado no seu código, já vai soltando “o pulo do gato” estando um passo a frente nos estudos, boa sorte e parabéns pelo empenho!