Como faço para ampliar um Array?

Escreva uma função que amplia a capacidade de armazenamento de um array recebido por
parâmetro, com base em um fator de ampliação, também recebido por parâmetro, como pode ser
visto na função abaixo.

public static int[] ampliarArray(int[] umArray, float fator) {
// Todo seu código aqui

empaquei nessa questão é não consegui proseguir

Existe um conceito na questão de array que é um tipo definido de posições, ou seja, imutável, aquele que não muda, nesse caso existe as formas de contorna isso que é criar um novo array a partir do antigo criando mais uma posição com o novo valor, só que tem um problema nesse método porque o paramento não deveria ser int fator?

Se o paramento for inteiro a solução é abaixo:

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static int[] ampliarArray(int[] umArray, int fator) 
	{
		int oldLength = umArray.length;
		int newLength = (oldLength + 1);
		int[] newArray = new int[newLength];
		for(int i = 0; i < oldLength; i++)
		{
			newArray[i] = umArray[i];
		}
		newArray[oldLength] = fator;
		return newArray;
	}
	public static void main (String[] args) throws java.lang.Exception
	{
		int[] array = {1,2,3,4,5};
		for(int i = 0; i < array.length; i++)
		{
			System.out.print(array[i]);
			System.out.print(' ');
		}
		System.out.println();
		System.out.println();
		array = ampliarArray(array, 6);
		for(int i = 0; i < array.length; i++)
		{
			System.out.print(array[i]);
			System.out.print(' ');
		}
	}
}

Rodando Online

1 curtida

E aí, @Rammstain. Tranquilo? /m/_

Como o estimado colega Dragoon demonstrou acima, é preciso que você entenda uma questão sobre os vetores:

Os vetores (arrays), em linguagens como o Java, tem uma propriedade bem característica: Eles são “imutáveis” no sentido de “acrescer posições”. Ou seja, um vetor com 3 posições sempre será um vetor com 3 posições. Um vetor com 7 posições sempre será um vetor com 7 posições. Então, de modo direto, não existe como “adicionar posição num vetor”.

O que pode ser feito (e foi demonstrado) é criar um novo vetor com uma capacidade igual ou superior ao vetor anterior e transferir os dados para ele. Tudo que estou falando está demonstrado na resposta do Dragoon, mas é preciso que você entenda esses conceitos de verdade.

Bons estudos!
[]'s

3 curtidas

Esse fator provavelmente representa o percentual de crescimento, por exemplo, 0.5 deve fazer o seu array aumentar em 50% e assim por diante.

public static int[] ampliarArray(int[] arrayOriginal, float fator) {
    int tamanhoOriginal = arrayOriginal.length;
    int tamanhoNovo = tamanhoOriginal + (int) (fator * tamanhoOriginal);
    int[] arrayNovo = new int[tamanhoNovo];
    System.arraycopy(arrayOriginal, 0, arrayNovo, 0, tamanhoOriginal);
    return arrayNovo;
}
1 curtida

Array é imutável, como afirmaram os colegas acima, você teria que criar outro array e copiar o conteúdo para dentro do novo array.

Lembrando que existe o ArrayList Collection, este sim pode-se adicionar e excluir quantos itens forem desejados. De uma pesquisada.