5
respostas

duvida sobre Vetor

Estou aqui com esse código e possuo uma duvida. No método toString, quando vou percorrer o tamanho do Array preciso colocar o valor dele -1 ? e existe um if depois de percorrer todo o tamanho do Array. isso que estou meio confuso.

public class Vetor {

    private String[] elementos;
    private int tamanho;

    public Vetor(int capacidade) {
        this.elementos = new String[capacidade];
        tamanho = 0;
    }

/**
     * Método que retorna todos os Arrays em String, somente as posições preenchidas
     */
    public String toString(){

        StringBuilder b = new StringBuilder();

        b.append("[");

            for(int i=0; i < tamanho -1;i++){
                b.append(this.elementos[i]);
                b.append(",");
            }
            if(this.tamanho >0){
                b.append(this.elementos[this.tamanho -1]);
            }
        b.append("]");

        return b.toString();
    }
5 respostas

Bom dia Dayson,

Quando você trabalha com arrays funciona assim:

Um array de 10 posições digamos, tem como índice para o primeiro elemento o zero, o índice do segundo elemento é 1, e assim sucessivamente até que o índice do décimo elemento seja 9. Repare que é assim porque os índices de arrays iniciam do zero e não do 1. Exemplo:

String[] elementos = new String[10];
elementos[0] = "Primeiro item";
elementos[1] = "Segundo item";
elementos[2] = "Terceiro item";
.
.
.
elementos[9] = "Décimo item";

Ou seja, para iterar neste array, o seu for precisa ter uma variável de controle iniciando do zero, que é a primeira posição do array, e indo até o tamanho dele -1, que será neste caso 10 - 1, ou seja 9, e baseado na condição do laço (i < ...), isso quer dizer que ele vai executar a lógica dentro do laço para todos elementos menos o último, porque é enquanto o valor de i for menor que 9, ou seja, quando ele for 9, não é menor, é igual, logo termina o laço:

for (int i = 0; i < elementos.length - 1; i++) {
    // lógica que vc quer fazer com o array
}

Isso foi feito assim apenas por causa da vírgula que é adicionada, e ai o if abaixo serve para adicionar o último elemento (tamanho -1, que será índice 9) no StringBuilder e não colocar vírgula sobrando no final.

Deu para esclarecer?

Só tem alguns erros neste código, no construtor, o valor do parâmetro capacidade deveria ser atribuído para o atributo tamanho, senão o laço do toString não vai funcionar, já que a atributo tamanho é usado para controlar ele. Se ele for 0, como é feito no construtor, vai bater no laço e nem vai fazer nada. Mesma coisa para o if, não vai adicionar nada também.

Só para comparar, se você quisesse iterar neste array mostrando todos os elementos de uma vez só, seria um laço assim:

for (int i = 0; i < elementos.length; i++) {
    System.out.println(elementos[i]);
}

Aqui queremos passar por todos os índices do array durante o laço, logo a condição fica enquanto i menor que o tamanho (que é 10), aí sim vai rodar desde i=0 até i=9, são todos menores que 10, e quando chegar em i=10, não vai rodar porque 10 não é menor que 10, é igual.

Precisando de mais alguma coisa estamos ai. Como você está iniciando recomendo estudar bem essas estruturas e tirar todas as dúvidas, não tenho medo de postar, é vital entender bem o funcionamento de arrays, já que eles serão base para estruturas mais avançadas que você usará bastante em programação.

Abraços.

Humm.... obrigado pela ajuda!

No caso eu passei um tamanho no construtor, para quando for instanciado eu informo quantas posições eu quero para o meu Array. Ai na minha classe teste Eu adiciono quantos elementos eu quero e etc.. não é assim?

Sim é isso mesmo.

até estou absorvendo bem, fiquei só com um pouco de duvida no método toString esse parte

 if(this.tamanho >0){
                b.append(this.elementos[this.tamanho -1]);
            }

Vejo que estou imprimindo, somente as posições preenchida, não quero posições null.

Esse código fazia imprimir o que estava em todas as posições, separando por vírgulas.

Se você quer iniciar um array com 10 posições, mas não preencherá todas, e quer que mostre apenas as que tem valor, terá que alterar a lógica.

Para isso durante a iteração do array, terá que fazer um teste lógico (if) para verificar se o valor não é nulo, algo como:

if (elementos[i] != null) {
    // faz a lógica que desejar quando o valor de uma posição do array não for nula
}

Como sua dúvida está off-topic não sei em qual curso você está, mas se está tendo dificuldade em identificar como fazer uma operação básica de lógica, te recomendo fazer os cursos iniciais de programação e algoritmos, onde o foco é desenvolver o raciocínio lógico e não linguagem de programação. Esses conhecimentos abaixo são essenciais de se ter antes de partir para programar mais avançado em Java, PHP, JavaScript ou qualquer outra linguagem de programação.

Lógica de Programação I

Lógica de Programação II

Algoritmos I

Algoritmos II

Estrutura de Dados

Abraços.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software