Criar List... qual o erro aqui?

Salve pessoal, nao to conseguindo add na lista, dar esse erro:

F:\Meus documentos\java>javac -Xlint:unchecked jogo/jogo/corpo.java jogo/jogo/corpo.java:44: warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList lista.add(x, Integer.toString(casa)); ^ jogo/jogo/corpo.java:48: warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList lista.add(x, Integer.toString(casaigual)); ^ 2 warnings

Meu codigo:

[code]
import java.util.*;
//////
boolean addp = true;
private int casa =0;
private int numero;
private int x=0;

private List lista = new ArrayList();

public void addfig(){
while(x < 4){
casa++;

if(addp == true){
addp=false;
lista.add(x, Integer.toString(casa));
}else{
addp=true;
int casaigual=casa-1;
lista.add(x, Integer.toString(casaigual));
}
x++;

}
}[/code]

No eclipse aparece sem erro, mas ao compilar dar aqueles 2 warnings

Esses warnings são do Java 5 (reclamando que você não está usando a sintaxe de generics.)
Warnings não são erros - apenas avisos - ; pode ignorá-los, a menos que queira usar generics.

Olá,

Veja na documentação, o método add recebe parametros de duas formas:

add(String item) 
Adds the specified item to the end of scrolling list.
add(String item, int index) 
Adds the specified item to the the scrolling list at the position indicated by the index.

Vc está passando em forma contrária, num sei ao certo se seria isto, mas vale a pena tentar.

Valeu,

Paulo

Paulo, ele quer usar java.util.List, não java.awt.List, que é o que você achou na documentação. O uso de java.util.List pelo programa do O_M3_ está correto, e compilaria corretamente com Java 1.4. No Java 5.0 também compila corretamente mas com esses warnings.

Thingol,

Desculpe pela mancada, foi mal mesmo, e aproveitando a deixa, tem como explicar para um ignorante o que seria o generics.

Atenciosamente,
Paulo

O “generics” é um acréscimo à sintaxe do Java cujo objetivo é reduzir um pouco a quantidade de casts quando se usam coleções. (Ele também serve para outras coisas, mas isso veio “de contrabando”.)

Por exemplo, quando se quer usar uma lista de objetos, normalmente não é uma lista de qualquer objeto (que é o caso do java.util.List); é uma lista que deveria conter apenas Strings, ou objetos da classe DadosCliente, ou alguma outra coisa.

No seu caso parece que é uma lista que deveria conter apenas Strings. Nesse caso você usaria um List < String > em vez de um List sem nada.

Então em vez de declarar List lista = new ArrayList(), você declararia List < String > lista = new ArrayList < String > ().

A vantagem você vê quando vai acessar um elemento dessa lista. Em vez de escrever:

String umElemento = (String) lista.get (1);

você usa simplesmente:

String umElemento = lista.get (1);

que ele sabe que você prometeu (a declaração é um tipo de “promessa”) que só vai pôr String dentro da lista. Só que internamente ele continua fazendo o cast do mesmo jeito. É só para facilitar o jeito de escrever, e fazer com que o compilador possa achar alguns erros de lógica no seu programa.

import java.util.*;

class TestLista {

    //////
    boolean addp = true;
    private int casa =0;
    private int numero;
    private int x=0;

    // A declaração original...
    // private List lista = new ArrayList();

    // Aqui estou supondo que você quer ter uma lista de Strings.
    private List < String > lista = new ArrayList < String > ();
    
    public void addfig(){
        while (x < 4) {
            casa++;

            if(addp == true) {
                addp = false;
                lista.add(x, Integer.toString(casa));
            } else {
                addp = true;
                int casaigual=casa-1;
                lista.add(x, Integer.toString(casaigual));
            }
            x++;

        }
    }
}

Thingol,

Valeu pela excelente explicação.

T+

Paulo

aparentemente funcionou.

Mas vejam o que eu pretendo juntamente com a list.

Metodo 1, randomiza e depois exclui o item da lista, um ramdom sem repetiçoes.

[code]
private JButton button1, resete, button2, button3, button4;
////

public String randomico(){
int t_casa=lista.size();
numero=r.nextInt(t_casa);
lista.remove(numero);
saiNumero = (String)lista.get(numero);

return saiNumero;
}[/code]

Metodo 2 usando o random nos buttons.setName(randomico());

[code] public void aparencia(){
if(iconex == null){
iconex = “iconjogo.gif”;
}
ImageIcon icone1 = new ImageIcon(iconex);

   JFrame frame = new JFrame();

button1 = new JButton();
button1.setName(randomico());

button2 = new JButton();
button2.setName(randomico());

frame.setSize(600,600);
frame.setVisible(true);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}[/code]

Class que executa:

[code]public class corpo {
public static void main(String args[]) {
teste a = new teste();
a.addfig();
a.aparencia();

  }

}[/code]
O problema: gero o .jar sem problema porem nao abre nada, mas se eu retirar as chamadas do randomico do setName, ai o jar funciona.

ahhh resolvi, eu tava usando o remove antes de pegar com o get… Muito obrigado pessoal

Será que a ordem dos tratores altera o viaduto?

 lista.remove(numero); 
 saiNumero = (String)lista.get(numero);
 saiNumero = (String)lista.get(numero);
 lista.remove(numero); 

Respostas/explicações excelentes.

Como sempre.

-um fã