Sobre como aumentar a capacidade do vetor

Realmente é impossível aumentar a capacidade de um vetor depois que você declara o valor, mas existem maneiras de contornar isso.

Existe uma maneira que além de poder usar uma classe pronta do java você pode simplesmente passar os valores para um novo vetor, informar um novo valor para o vetor atual e depois pegar os valores do novo vetor para o antigo como eu tentei demonstrar no meu algoritmo abaixo.

//Desenvolvimento do Algoritmo

public class Vetor {

String[] elementos;
int tamanho;

//construtor força a informar o tamanho do vetor na aplicação
public Vetor(int capacidade) {

    this.elementos = new String[capacidade];
    this.tamanho = 0;
}

//método que será chamado pelo objeto na aplicação para adicionar
//caracteres

public void adicionar(String caracteres) {
    aumentaCapacidade();//aqui eu chamei o meu método aumentar capacidade para ele verificar as condições que foram impostas se são atendidas ou não.
    if (this.tamanho < this.elementos.length) {
        this.elementos[this.tamanho] = caracteres;
        this.tamanho++;
    }
}

//método para fazer a troca de valores e introduzir o novo valor
//na posição indicada como mostra a assinatura do método

public void trocar(String caractere, int posicao) {
    for (int i = this.tamanho; i >= 0; i--) {
        String aux;
        if (this.elementos[i] != null) {
            aux = this.elementos[i];
            this.elementos[i + 1] = aux;
            if (i == posicao) {
                this.elementos[i] = caractere;
                break;
            }
        }
    }
}

//aumenta a capacidade do vetor, copiando os valores existentes para um novo vetor,
//depois aumentando o tamanho do vetor anterior antes de devolver os valores

public void aumentaCapacidade() {

public void aumentaCapacidade() {

    if (this.tamanho == this.elementos.length) {
        String[] elementosNovos = new String[this.elementos.length * 2];
        for (int i = 0; i < this.elementos.length; i++) {
            elementosNovos[i] = this.elementos[i];
        }
        this.elementos = elementosNovos;
    }
}

//exibe na aplicação o resultado

@Override
public String toString() {

   for (int i = 0; i <= this.tamanho; i++) {
        System.out.print("Posição :" + i);
        System.out.print(" ");
        System.out.println("Elemento :" + this.elementos[i]);
    }
    return "";
}

}

//Aplicação do algoritmo

public class Aplicacao {
public static void main(String[] args) {

    Vetor vetor = new Vetor(9);

    vetor.adicionar("b");
    vetor.adicionar("c");
    vetor.adicionar("d");
    vetor.adicionar("e");
    vetor.adicionar("f");
    vetor.adicionar("g");
    vetor.adicionar("h");
    System.out.println(vetor.toString());
    System.out.println("");
 
    vetor.trocar("a", 0);
    System.out.println(vetor.toString());
    }   

}

se houver outras maneiras gostaria que compartilhassem.

Não ficou claro a funcionalidade que precisa atender, mas no geral pode usar ArrayList.

o array.list ele ja utiliza uma classe pronta do java, o eu estava tentando fazer é verificar uma alternativa alem do array.list e se realmente não tinha como aumentar a capacidade do vetor como todos diziam, aí eu perguntei aos meus colegas e nós chegamos a esta conclusão, ao invés de tentar aumentar diretamente no tamanho do vetor.

por exemplo eu tenho vetor1[5] com valores preenchidos, mas eu quero aumentar mais 1 da capacidade, eu só preciso criar um novo vetor que podemos chamar de vetor2[vetor1.tamanho+1], na hora em que eu crio o vetor2 eu já indico que ele terá o mesmo tamanho que o vetor1 com o adicional de +1, fazendo isso eu aumentei a capacidade do vetor2, depois eu transfiro meus valores do vetor1 para o vetor2, logo na parte final eu faço o vetor1 receber o vetor2 com um novo tamanho, depois eu só chamo novamente no método adicionar.

public void aumentaCapacidade() {

    if (this.tamanho == this.elementos.length) {
        String[] elementosNovos = new String[this.elementos.length * 2];
        for (int i = 0; i < this.elementos.length; i++) {
            elementosNovos[i] = this.elementos[i];
        }
        this.elementos = elementosNovos;
    }
}

public void adicionar(String caracteres) {

    aumentaCapacidade();
    if (this.tamanho < this.elementos.length) {
        this.elementos[this.tamanho] = caracteres;
        this.tamanho++;
    }
}

Está criando um problema sem necessidade. Usa ArrayList.

2 curtidas

a questão não é criar problemas sem necessidades, mas se em algum momento você precisar trabalhar com uma linguagem de programação diferente, em que você precise aprender do começo, lá provavelmente não terá o ArrayList, se tiver estará com um nome diferente, e é interessante tentar descobrir soluções alternativas sem depender muito das classes já pronta do java, principlamente quando se está vendo estrutura de dados em java, é mais para verificar o conceito do que aplicar realmente, se eu fosse escolher logicamente utilizaria o ArrayList, mas é bom as vezes sanar algumas dúvidas como eu propus no tópico.

Não é o caso da linguagem que está usando neste post. Quando realmente tiver um problema com outra linguagem, abre um post sobre o problema que está passando, pra resolver a funcionalidade com a outra linguagem.

bem, como eu disse, é para verificar soluções diferentes do ArrayList, e verificar se o método proposto pode se aplicado no java, é interessante utilizar a lógica para resolver determinados casos, e em casos mais complexos que necessitam de mas linhas de códigos, classes e métodos, é realmente recomendado utilizar as classes prontas no java, neste caso de verificar o aumento do vetor “na minha opinião pessoal” daria para resolver utilizando apenas um método dentro da classe chamando esse método na hora de adicionar novos elementos, e verificar se existem soluções melhores “Alem do ArrayList” para trazer uma solução.

Permita-me concordar com o @javaflex

Agora, se quer algo que funcione como vetor e possa ser expandido além do limite inicial, dá uma olhada em estruturas de dados e implementa sua própria fila ou lista ou pilha, de acordo com a necessidade e com a linguagem em questão.
É simples? Nem sempre.
É fácil de usar? Nem sempre.
É eficaz e atende ao que você quer? Sim.