Estou com dificuldades para terminar o código desse enunciado:
1. Faça um programa que preencha um vetor com 8 números inteiros, calcule e mostre 2 vetores resultantes. O primeiro vetor resultante deve conter os números positivos e o segundo, os números negativos. Cada vetor resultante vai ter, no máximo, oito posições, que não poderão ser completamente utilizadas.
Meu código está assim:
public static void main(String[] args) {
int numero[] = new int [8];
int numPositivo[] = new int [7];
int numNegativo[] = new int [7];
Scanner sc = new Scanner(System.in);
System.out.println("Digite 8 números inteiros: ");
for(int i = 0; i < 8; i++){
System.out.print("-> ");
numero[i] = sc.nextInt();
if(numero[i] > 0){
numPositivo[i] = numero[i];
}else{
numNegativo[i] = numero[i];
}
}
}
Quando chega no ultimo valor de “i” vai retornar erro porque seu vetor de numPositivo e numNegativo é menor que o de numero. a solução seria criar 2 variaveis int antes do “for” e cada vez que ele cair no if ou no else você aumentar em 1 o valor desse indice.
1 curtida
Por que você criou os arrays numPositivo
e numNegativo
com apenas 7 posições? E se todos os 8 números forem positivos (ou todos negativos)? Além disso, não dá para usar o mesmo índice em todos os arrays.
Por exemplo, se os números digitados forem 1, 2, -3, 4, 5, 6, 7, 8.
O terceiro número é -3, que é o primeiro número negativo da lista. Mas da forma que você fez, ele será colocado na terceira posição do array de números negativos (mas o correto seria colocar na primeira posição, já que foi o primeiro negativo encontrado).
Ou seja, vai ter que ter um contador para cada array (um para os positivos, outro para os negativos):
int numeros[] = new int[8];
int positivos[] = new int[8];
int negativos[] = new int[8];
Scanner sc = new Scanner(System.in);
System.out.println("Digite 8 números inteiros: ");
int iPos = 0, iNeg = 0;
for (int i = 0; i < numeros.length; i++) { // use length em vez de um valor fixo, assim vc pega o tamanho do array
System.out.print("-> ");
numeros[i] = sc.nextInt();
if (numeros[i] >= 0) {
positivos[iPos] = numeros[i];
iPos++;
} else {
negativos[iNeg] = numeros[i];
iNeg++;
}
}
// mostrando os números
System.out.printf("foram encontrados %d números positivos\n", iPos);
for (int i = 0; i < iPos; i++) {
System.out.println(positivos[i]);
}
System.out.printf("foram encontrados %d números negativos\n", iNeg);
for (int i = 0; i < iNeg; i++) {
System.out.println(negativos[i]);
}
Também considerei o zero como positivo (antes o if
usava >
, então se fosse zero, seria considerado negativo).
E mudei os nomes dos arrays para o plural, pois assim eles passam melhor a ideia de que têm mais de um número ali (numero
no singular dá a ideia de que tem um só). Pode parecer um detalhe besta, mas dar nomes melhores ajuda na hora de programar.
3 curtidas
No enunciado ele fala que " as oito posições não poderão ser completamente utilizadas", como estou começando agora na programação achei que assim funcionaria kkkkk mas depois reli e entendi a interpretação kkkk
Aaah, por isso acaba dando erro…
@hugokotsubo muito obrigada, clareou muito e me ajudou ate a resolver outras questões. Muito obrigada!
1 curtida