Substituir Vector por ArrayList

8 respostas
calves

Pessoal como eu altero o código abaixo para utilizar o arrayList no lugar do vector?

public class Jogo  {
    private BancoPalavras bancoPalavras;
    private Vector<String> palavraSoletrada;
    private int erros;
    private String sorteada;
    private TreeSet<String> letrasUsadas;

    public Jogo() throws IOException{
        try{
          bancoPalavras=new BancoPalavras();
          sorteada=bancoPalavras.sorteiaPalavra();
          palavraSoletrada = new Vector<String>(sorteada.length());
          soletraPalavra();
          letrasUsadas = new TreeSet<String>();
          erros = 0;
        }
        catch (IOException e){throw new IOException (e.getMessage());}
    }

    public int getErros() {
        return erros;
    }

    public void setErros(int erros) {
        this.erros = erros;
    }

    public String getSorteada() {
        return sorteada;
    }

   

    public String getLetrasUsadas() {
        Iterator iterator = letrasUsadas.iterator();
        String letras = new String();
        while (iterator.hasNext()) {
            letras += (String) iterator.next() + " ";
        }
        return letras;
    }

   
    public void soletraPalavra() {
        for (int i = 0; i < palavraSoletrada.capacity(); i++) {
            palavraSoletrada.add("_ ");
        }
    }

    @Override
    public String toString() {
        Iterator iterator = palavraSoletrada.iterator();
        String saida = new String();
        while (iterator.hasNext()) {
            saida += (String) iterator.next();
        }
        return saida;
    }

    public int checaPalpite(String letra) {
        int retorno = 0;
        letrasUsadas.add(letra); // adiciona a letra digitada no TreeSet
        for (int i = 0; i < sorteada.length(); i++) {
            if (letra.equalsIgnoreCase(sorteada.substring(i, i+1))) {
                palavraSoletrada.setElementAt(letra + " ", i);
                retorno++;
            } else {
            }
        }
           return retorno;
    }

    public boolean checaSituacao() {
        Iterator iterator = palavraSoletrada.iterator();
        String saida = new String();
        while (iterator.hasNext()) {
            saida = (String) iterator.next();
            if (saida.equalsIgnoreCase("_ ")) {
                return true;
            }
        }
        return false;
    }

    public String trocaImagem() {
        String img = "";
        switch (erros) {
            case 1: img = "/imagens/forca2.jpg"; break;
            case 2: img = "/imagens/forca3.jpg"; break;
            case 3: img = "/imagens/forca4.jpg"; break;
            case 4: img = "/imagens/forca5.jpg"; break;
            case 5: img = "/imagens/forca6.jpg"; break;
            case 6: img = "/imagens/forca7.jpg"; break;
        }
        return img;
    }
}

8 Respostas

InicianteJavaHenriqu
private Vector&lt;String&gt; palavraSoletrada;
private List&lt;String&gt; palavraSoletrada;
palavraSoletrada = new Vector&lt;String&gt;(sorteada.length());
palavraSoletrada = new ArrayList&lt;&gt;(sorteada.length());
for (int i = 0; i &lt; palavraSoletrada.capacity(); i++)
for (int i = 0; i &lt; palavraSoletrada.length; i++)

Para mais detalhes, segue :arrow: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html

:thumbup:

calves

O comando “palavraSoletrada.length” esta com erro aqui eu coloco o .size() certo?

for (int i = 0; i < palavraSoletrada.length; i++){

e aqui no setElementAt(letra + " ", i) eu coloco o que?

palavraSoletrada.setElementAt(letra + " ", i);
InicianteJavaHenriqu

Tá certo .size(); retorna o tamanho da lista.

e no lugar de .setElementAt(); use .set();

:thumbup:

thiagof

Tá certo .size(); retorna o tamanho da lista.
e no lugar de .setElementAt(); use .set();

calves

Só não esquece que a ordem dos parâmetros do método .set() é inversa à ordem dos parâmetros do método .setElementAt()

Dá uma olhada na documentação dos dois métodos:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#set%28int,%20java.lang.Object%29
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html#setElementAt%28java.lang.Object,%20int%29

calves

então esse:

palavraSoletrada.setElementAt(letra + " ", i);

fica esse, certo?:

palavraSoletrada.set(i,letra + " ");
thiagof

Correto!

se vc usa o eclipse ou o netbeans para escrever seu código, é só digitar: “palavraSoletrada.” ele já te sugere um monte de método para usar e também facilita mostrando os parâmetros que vc deve passar para o método e mais ainda, ele dá uma descrição do que o método espera em cada parâmetro e o que ele faz. Isso é uma mão na roda :smiley:

calves

Amigos, no momento muito obrigado. :thumbup:

ViniGodoy

Além disso, é melhor usar for each no lugar de iterator. E, sempre que concatenar Strings num loop, use o StringBuilder.
O operador += da String é muito lento.

Compare.

Com iterator e concatenação:

public String getLetrasUsadas() { Iterator&lt;String&gt; iterator = letrasUsadas.iterator(); String letras = new String(); while (iterator.hasNext()) { letras += iterator.next() + " "; } return letras; }

Com for each e StringBuilder:

public String getLetrasUsadas() { StringBuilder letras = new StringBuilder(); for (String letra : letrasUsadas) { letras.append(letra); } return letras.toString(); }

Criado 17 de abril de 2012
Ultima resposta 17 de abr. de 2012
Respostas 8
Participantes 4