ArrayList

Estou fazendo um método dentro da ArrayList que retorna 4 numeros iguais, porém ele retorna true, mesmo se tem somente 3 números iguais… não estou conseguindo achar o erro, alguém pode me ajudar?

Eis o código:

[code] public boolean verificaQuatro(){
int t=s.size();
int q=0;
ValorFace valor;
Numero c=null;
boolean quatro=false;
int nn = 0;

        for(int i=0; i<t; i++){
            for(int y=i+1; y<t; y++){
                if(s.get(i).getValor()==s.get(y).getValor()){
                    c=s.get(y);
                    q++;
            }

        }
        if(q==3){
            quatro=true;
            }
            else quatro=false;
        }
        return quatro;
    }[/code]

nao sei ao certo, + pelo que entendi vc quer que se todos forem iguais ele retorna true certo?
entao se um for false pra retornar false .

if(q==3){

quatro=true;

}

    else
 quatro = false;
 [b]break;[/b]

pq vc nao tera necessidade de ver os outros, acho que o erro ai ta dando o seguinte, ele deve estar pegando somente o ultimo numero consultado

se ajudei valeu, se falei merda pra cacete foi mau hehehe!

Valeu ae, funcionou =]

Assim oh, eu estou fazendo um jogo de Poker há algumas semanas já, e estou com problemas em verificar 3 jogadas…

O resto tudo está pronto, só falta elas, tou quebrando a cabeça mas não consigo fazer…

Vou mostrar o código, se alguém puder me ajudar =].

Full House:

[code] public boolean verificaFullHouse(){//n funfa
int t = mao.size();
boolean trinca = false;
int tr = 0;
int par = 0;
boolean fh = false;
Carta c;
for(int i=0; i<t-1; i++){
if(mao.get(i).getValor()!=mao.get(i+1).getValor()){
c=mao.get(i+1);
guardaValor.add©;
tr++;
}

                if(tr==2 && verificaDoisPares() == false){
                    trinca=true;                         
                }
                if(mao.get(i).getValor()==mao.get(i+1).getValor()){
                    par++;
                }
                if(par == 1 && trinca == true){
                    fh = true;
                }
                else fh = false;
            }
            return fh;
        }[/code]

Straight e Straight Flush:

[code] public int straightFlush(){
int tamanho=mao.size();
int n=0;
Carta c1, c2;
boolean verificaSequencia=false;
for(int i=0; i<tamanho; i++){
for(int y=i+1; i<tamanho; i++){
if((valor(mao.get(y).getValor()))-(valor(mao.get(i).getValor()))==1 || valor(mao.get(y).getValor())-(valor(mao.get(i).getValor()))==-1){
n++;
}
if(n==5){
verificaSequencia=true;
}
if(verificaSequencia = true && verificaFlush() == true){
return 2;
}
else if(verificaSequencia = true && verificaFlush() == false){
return 1;
}
else return 0;
}
}

       return 0;
    }[/code]

Não quero que ninguém faça para mim, só que aponte os erros. Esses dois métodos fazem parte de um trabalho que eu tenho que desenvolver, e claro que pode pedir auxílio aos outros, mas eu quero é aprender, e não pegar as coisas prontas sem aprender nada.

Muito obrigado desde já.

[quote=bruxo]Estou fazendo um método dentro da ArrayList que retorna 4 numeros iguais, porém ele retorna true, mesmo se tem somente 3 números iguais… não estou conseguindo achar o erro, alguém pode me ajudar?
[/quote]

O problema já foi resolvido mas vc pode considerar usar um Map<Integer, Integer> para contar.



Map<Integer, Integer> contadores = new TreeMap<Integer, Integer>();
for (Card card : mao){

   Integer contador =   contadores .get(card.getValor());
    if ( contador == null{
        contador = 0;
   } 

   if (contador== 3){ // (A)
           return true; // se havia 3 e foi encontrada mais uma então são 4
   }  

   contadores.put(vard.getValor(), contador + 1);

   if (contadores.size()== 3 ){ //(B)
        return false; // se ha três diferentes é impossivel haver 4 iguais.
   }
  
}

}

A e B são otimizações que interrompem a procura mais cedo.