Preciso fazer um programa que tenha um array de tamanho indefinido e vão crescendo de acordo com a quantidade de “adições” que o usuário faça. Daria pra fazer isso com ArrayList e Vecotr, porém não posso usar nenhum dos dois, como faço na mão para simples arrays serem criados com tamanho indefinido, digamos assim?
Só pra quebrar um galho vou lhe dar um exemplo simples:
Fique claro que este é o mais simples, mas uns de maior custo que conheço.
minha classe guarda um atributo para um array de um tamanho x, sempre que o tamanho x esta prestes a ser alcançado eu crio um novo array maior e copio o velho para o novo e tomo o novo como o array da minha classe, este é o processo de crescimento, você deve manter outros atributos como o índice do ultimo elemento no array.
Da pra implementar de diferentes formas, depende do onde e para o que vai ser usada (depende dos requisitos), um livro bom sobre Algoritmos e Estrutura de dados é o “Algoritmos Teoria e Prática, Thomas H. Cormen, …”
Basicamente é o que DavidUser falou… Você coloca uma condição simples, quando o array x estiver completo você cria um novo array com 2x o tamanho anterior (tamanho arbitrário) e passa todos os dados para o novo array. Isso garante que seu array seja de “tamanho indefinido”.
procura nesta página os itens “Array and resizing array implementations of collections”
Não posso usar LinkedList nem nada desse tipo. Vou tentar seguir o conselho postado lá em cima.
Obrigado a todos.
rogeriopaguilar
Mas nos exemplos ele não utiliza linkedlist, não sei se chegou a ler o código de exemplo, mas o que ele faz é o que falaram lá em cima. Internamente ele redimensiona o array. Vou postar o link do código:
No método enqueue ele faz isso, dá pra ver pelo comentário:
publicvoidenqueue(Itemitem){// double size of array if necessary and recopy to front of arrayif(N==q.length)resize(2*q.length);// double size of array if necessaryq[last++]=item;// add itemif(last==q.length)last=0;// wrap-aroundN++;}
Preciso fazer um programa que tenha um array de tamanho indefinido e vão crescendo de acordo com a quantidade de “adições” que o usuário faça. Daria pra fazer isso com ArrayList e Vecotr, porém não posso usar nenhum dos dois, como faço na mão para simples arrays serem criados com tamanho indefinido, digamos assim?
Só com array é impossivel em java. Todos os arrays em java têm um tamanho definido à priori.
O único truque é aquele que já lhe disseram, que é basicamente o que o ArrayList faz. Ou seja, quem lhe pediu isso, quer que vc crie um objeto que faz o mesmo que o ArrayList ( o que é si mesmo é uma tarefa meio exótica)
Para copiar os arrays use System.arrayCopy. Mais sobre como trabalhar com arrays, aqui