PDA

Ver Versão Completa : Java[+programação][+help]


Luigi666
22/11/2008, 23:43
Escrevi um método assim:

public void pontos(ArrayList<Clube> club)
{
int soma = 0;
int cont = 0;
Console cons = new Console();
for(Clube cc: club)
{
for(cont = 0; cont < listaPartidas.size(); cont++)
{
String nome = cc.getNome() + "-" + cc.getEstado(); //tem algo bugado aqui aff -.-
if(nome == listaPartidas.get(cont).getMandante())
cons.println(nome + "------" + listaPartidas.get(cont).getMandante());

if(nome == listaPartidas.get(cont).getMandante())
{
if(listaPartidas.get(cont).getGolsMandante() > listaPartidas.get(cont).getGolsVisitante())
soma = soma + 3;
else if(listaPartidas.get(cont).getGolsMandante() == listaPartidas.get(cont).getGolsVisitante())
soma = soma + 1;
}
if(nome == listaPartidas.get(cont).getVisitante())
{
if(listaPartidas.get(cont).getGolsVisitante() > listaPartidas.get(cont).getGolsMandante())
soma = soma + 3;
else if(listaPartidas.get(cont).getGolsVisitante() == listaPartidas.get(cont).getGolsMandante())
soma = soma + 1;
}

}

cc.setPontos(soma);
}
}

Mas então, ele não soma os pontos no atributo pontos do Clube...

O pior é que pelos testes que eu fiz, ele não reconhece aquela parte lá em cima que diz:

if(nome == listaPartidas.get(cont).getMandante()

Eu tentei resolver isso com um nome = cc.getNome() + "-" + cc.getEstado() como vocês podem ver, porque os nomes dos estados estão nesse formato.

Tipo: Gremio-RS, Flamengo-RJ, sem acentos...

O que eu constatei é que ele parece não querer reconhecer que essa variável nome, mesmo tando sempre sendo refeita a cada rodada no contador, é igual sim ao nome que passa pelo get(cont).getMandante()

Alguém pra ajudar? :-(

Vlw OS :kongpositivo:

Minotauro!=Centauro
23/11/2008, 00:20
Cara, não tem como colocar uma tabulação não?
Daí fica mais fácil de ler...
Já enxergo mal pra caramba, daí ler sem tabulação fica difícil...

llqs
23/11/2008, 00:59
Uhn, eu nunca tinha visto isso aqui: for(Clube cc: club)
O que isso faz exatamente? cc pega automaticamente uma posição da lista a cada iteração?


O código ajeitado pra ajudar.

public void pontos(ArrayList<Clube> club)
{
int soma = 0;
int cont = 0;
Console cons = new Console();

for(Clube cc: club)
{
for(cont = 0; cont < listaPartidas.size(); cont++)
{
String nome = cc.getNome() + "-" + cc.getEstado(); //tem algo bugado aqui aff -.-
if(nome == listaPartidas.get(cont).getMandante())
cons.println(nome + "------" + listaPartidas.get(cont).getMandante());

if(nome == listaPartidas.get(cont).getMandante())
{
if(listaPartidas.get(cont).getGolsMandante() > listaPartidas.get(cont).getGolsVisitante())
soma = soma + 3;
else if(listaPartidas.get(cont).getGolsMandante() == listaPartidas.get(cont).getGolsVisitante())
soma = soma + 1;
}
if(nome == listaPartidas.get(cont).getVisitante())
{
if(listaPartidas.get(cont).getGolsVisitante() > listaPartidas.get(cont).getGolsMandante())
soma = soma + 3;
else if(listaPartidas.get(cont).getGolsVisitante() == listaPartidas.get(cont).getGolsMandante())
soma = soma + 1;
}

}

cc.setPontos(soma);
}
}

Minotauro!=Centauro
23/11/2008, 10:06
Tenta usar o operador de concatenação... ("&")
Não lembro agora se tem esse no Java, mas também acabei de acordar... :p

Luigi666
23/11/2008, 15:21
Tenta usar o operador de concatenação... ("&")
Não lembro agora se tem esse no Java, mas também acabei de acordar... :p


Recém almocei, vô encarar esse "dragão" agora, vlw a dica e por terem ajeitado pra mim ae :kongpositivo:


Aquele troço ali é um for-each... eu usei pra aproveitar e entender ele pra prova de amanhã.

Na teoria, pra cada Clube (que eu chamei de cc) dentro da ArrayList Club, ele faz aquelas instruções ali.

Dinosaur_Hunter2
24/11/2008, 09:40
Vamos lá.

Olhe esse comando: if(nome == listaPartidas.get(cont).getMandante())

Você NUNCA deve comparar objetos com o operador ==. Comparando assim, você está comparando o endereço de memória dos mesmos, e não os objetos em si. Para comparar objetos, use sempre o método equals(), que todo objeto em Java tem. No caso de uma String, usar o equals é verificar se uma String é igual a outra. Então, seu código ficaria assim:

if(nome.equals(listaPartidas.get(cont).getMandante ()))

Entendeu? Se você usar o operador de igualdade, duas strings iguais, mas criadas uma seguida da outra, podem ser diferentes porque possuem endereços de memória distintos. Creio que isso já vá resolver seu problema.

EDIT: O operador == deve ser usado somente na comparação de tipos primitivos, tais como char, int, boolean, long, etc.
EDIT 2: O operador de concatenação de String em Java é o + mesmo.
EDIT 3: Ajeite todos os outros if's também, pois todos estão usando o operador == para comparação de Strings.