Problemas com algoritmo de swapping (FIFO)

olá :slight_smile:

preciso fazer um trabalho de sistemas operacionais em que o programa lê um arquivo .txt de referências e conta os acertos e faltas de acordo com cada algoritmo de troca de páginas (FIFO, Segunda chance, etc…). Já tentei de tudo quanto é jeito, e nada funciona :? o programa lê o arquivo e coloca as referências em um vetor de Strings, mas o método FIFO só está contando as faltas, e ainda assim não está contando certo.

esse é o código do fifo:

[code]public class Nucleo {

int i,j;
Pagina pag, pagx;

public String fifo (int frame, Vector arquivo) {
int acertos = 0, faltas = 0, contFrame = 0;
LinkedList paginas = new LinkedList ();
LinkedList copiaPaginas = new LinkedList ();
String obj;

copiaPaginas.addAll(paginas);
for (i=0;i<arquivo.size();i++) {
    pag = new Pagina(arquivo.elementAt(i).substring(0, arquivo.elementAt(i).length()-1));
    

   if(contFrame < frame) {

       //se a memória nao estiver cheia
        
        Iterator ite = copiaPaginas.iterator();
        if (ite.hasNext()) {
           obj = ite.next().toString();
           pagx = new Pagina (obj);
           if (pagx.getP().equals(pag.getP().toString()))   //verificar se a próxima página já existe na memória
               acertos++;
           else {
               faltas++;
               contFrame++;
               paginas.add(pag);
               
                }
            }
        else {
            faltas++;
            contFrame++;
            paginas.add(pag);
            
        }

        }
    
   
    else {           //se a memoria estiver cheia
        
        Iterator ite = copiaPaginas.iterator();
        while (ite.hasNext()) {
           obj = ite.next().toString();
           pagx = new Pagina (obj);
           if (pagx.getP().equals(pag.getP().toString()))  //verificar se a próxima página já existe na memória
               acertos++;
           else
            faltas++;
            pag = paginas.remove();
            paginas.add(pag);
                            
        }
    }
}

String res = “”+acertos;

return res;

}[/code]

alguém poderia me ajudar a ver onde está o erro?

O que o método getP retorna? Se não for uma string, equals sempre retornará false.

Ele retorna uma string. Eu já tentei comparar a string da pagx com a pag de vários jeitos, mas parece que nunca dá pra comparar por causa do método next() do iterator, que retorna um objeto. Se ele estivesse conseguindo comparar, retornaria os acertos ._. Tentei fazer também o mesmo algoritmo usando for e não o iterator, e ele executa, mas não retorna nada ..

Amigo, você tem de tomar cuidado com “next”. É que ele avança o iterador; pode ser que seja isso que está lhe dando problemas (por exemplo, next() nunca é igual a next() porque next() avança o iterador :slight_smile: ).
Guarde uma referência para next (não custa nada criar mais uma variável :slight_smile: em vez de usar o valor diretamente, para você não se embananar.