Separando um vetores em dois vetores com valores positivos e negativos

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! :heart:

1 curtida