Estou com duvida sobre como usar while com array

Então eu tenho que preencher um array que eu não sei qual será o seu tamanho, como eu uso um while para preencher um array que eu não tenho a informação do seu tamanho.

Essa é o progama em questão:

A prefeitura de uma cidade deseja fazer uma pesquisa entre seus habitantes. Faça um algoritmo para coletar dados sobre o salário e número de filhos de cada habitante e após as leituras, escrever:

  1. Média de salário da população

  2. Média do número de filhos

  3. Maior salário dos habitantes

  4. Percentual de pessoas com salário menor que R$ 150,00

Na questão não informa o tamanho do array, eu fiz com for e da certo.
Como eu faria esse mesmo programa só que com while, dede já agradeço.

import java.util.Scanner;

public class test2 {
	
	static int salario = 0, countsalario = 0, countfilho = 0, filho = 0, maior = 0, count150 = 0, mediafilho;
	static double mediasalario, media150;

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int vetorsalario[] = new int[5];
		int vetorfilhos[] = new int[5];
		
		for (int i = 0; i < 5; i++) {
			System.out.println("Qual o seu salário");
			vetorsalario[i] = scan.nextInt();
			countsalario++;
			salario = salario + vetorsalario[i];
			
			System.out.println("Quantos filhos você tem");
			vetorfilhos[i] = scan.nextInt();
			filho = filho + vetorfilhos[i];
			countfilho++;
		}
		
		mediasalario = salario / countsalario;
		mediafilho = filho / countfilho;
		
		for (int i = 0; i < 5; i++) {
			if(vetorsalario[i] > maior) {
				maior = vetorsalario[i];
			}		
		}
		
		for (int i = 0; i < 5; i++) {
			if(vetorsalario[i] < 150) {
				count150++;				
			}
		}
		System.out.println(count150);
		System.out.println(countsalario);
		
		media150 = 100 * (count150 / countsalario);
		
		System.out.println("A média salárial da população é: "+ mediasalario +" reais");
		System.out.println("A média do número de filhos é: "+ mediafilho);
		System.out.println("O maior salário entre os habitantes é: "+ maior +" reais");
		System.out.println("O percentual de pessoas com salário menor que R$150,00 é: "+ media150 +"%");
	}
}

Com while, seria algo assim:

int contador = 0;

while (contador < 5) {
	// codigo
	contador++;
}

ai que ta não é 5, o 5 q eu coloquei seria pra fazer com o for, mas é um número que eu inventei.
A questão não fala quantos tem que ser, ae eu quero saber como que faz nesses casos que você não tem a informação do tamanho do array.

Arrays tem tamanho pré determinado, ou seja alocação estática de memória.

Se você não sabe quantos elementos precisa, deveria usar uma estrutura de alocação dinâmica de memória, como por exemplo uma implementação de List, pode ser um LinkedList ou ArrayList.

Agora se o seu exercício não permite usar estruturas prontas então você pode fazer o seguinte:
Trabalha com um array de tamanho pré determinado, quando esse array ficar cheio, cria um novo com o dobro do tamanho e copia os elementos do array antigo pra dentro do novo.

1 curtida

Poderia me dar um exemplo de como identificar quando o array fica cheio e em seguida criar um novo com o dobro do tamanho?
Eu ainda não avancei muito em programação e tenho dificuldade de achar coisas do tipo.

Você pode ir controlando com contadores, tipo, a cada elemento inserido você incrementa um contador, quando o contador for igual ao tamanho do array, é porque o array está cheio.

    int tamanho = arrayOriginal.length; // obter tamanho do array original
    int[] arrayDobrado = new int[tamanho * 2]; // criar array com o dobro do tamanho
    System.arraycopy(arrayOriginal, 0, arrayDobrado, 0, tamanho); // copiar elementos do array original pro array dobrado
2 curtidas

Vlw cara, ajudou muito.