Chamar função dentro da classe

Olá a todos!

Estou com uma dúvida de iniciante que é a seguinte:
Tenho uma classe e criei uma função dentro dela, daí preciso chamar essa função dentro de um loop, entretanto não estou conseguindo. Além disso, quando coloquei o código dentro da função, ela não “reconheceu” as variáveis da classe principal.

Abaixo segue o código:
Se alguém pode me ajudar? Desde já obrigado

package ag_pmpc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class AG_PMPC_Atendido_Capacidade {

    @SuppressWarnings("empty-statement")
 public static ArrayList<Integer> atendido_capacidade(ArrayList<Integer> Individuo, int[]demanda, int tamanho_instancia, ArrayList<ArrayList<Float>> matriz, int[]capacidade, int numero_medianas, ArrayList<Integer>medianas){  


        float fo =0;
        long xdemanda = 0;
        float xcapacidade = 0;
        long soma_demanda = 0;
        float med = 0;
        int individuo_sem_melhora = 0;
        long menor_valor =1000;
        long valor =0;
        int indice =0;
        int med_aux =0;
        int ultimo_elemento = 0;
        int parada = 0;
        long diferenca_maior_demanda =0;
        long diferenca_menor_demanda =0;
        long maior_demanda=0;
        long menor_demanda= 1000000;
        int indice_maior_demanda =0;
        int indice_menor_demanda =0;
        int mediana_maior_demanda=0;
        int mediana_menor_demanda=0;
        int troca =0;
        int excesso = numero_medianas;
        Random random = new Random();
        Random rnd = new Random();
          
        ArrayList<Long> valores_demandas = new ArrayList<>();
        ArrayList<ArrayList> demandas_ajustadas = new ArrayList<ArrayList>();
        

        for (int j=0; j< tamanho_instancia; j++){
        
            xcapacidade = capacidade[j];
        }

        while (excesso != 0)   {
            
          if (individuo_sem_melhora < 50 ){

            for (int i=0; i<numero_medianas; i++){
                med = medianas.get(i); // variável med recebe a mediana.
                soma_demanda =0; 
                
                for (int j=0; j<tamanho_instancia; j++){
                
                    if(Individuo.get(j) == med ){
                    
                        xdemanda = demanda[j];
                        soma_demanda = soma_demanda + xdemanda;
                    }
                    else{
                         continue;
                    }
                }
                valores_demandas.add(soma_demanda); // Armazena a soma das demandas de cada mediana.   
            }
            
         //   demandas_ajustadas.add(valores_demandas);
            
            for (int j=0; j< numero_medianas; j++){
                if (valores_demandas.get(j) <= xcapacidade){
                    excesso = excesso - 1;
                }
            }

            for (int w=0; w< numero_medianas; w++){
                if (valores_demandas.get(w) < menor_demanda) {
                    menor_demanda = valores_demandas.get(w); // Armazena a menor demanda da mediana
                    indice_menor_demanda = w;
                    mediana_menor_demanda = medianas.get(indice_menor_demanda);
                }
                diferenca_menor_demanda = capacidade[w] - menor_demanda;
            }            
               for (int w=0; w< tamanho_instancia; w++){
                     if (Individuo.get(w)== mediana_maior_demanda) {
                         if (demanda[w] <= diferenca_menor_demanda){
                            if (Individuo.get(w)!=(w+1))  { // verifica se o vértice é diferente da mediana.
                                 while (diferenca_maior_demanda >= 0){
                                     Individuo.set(w, mediana_menor_demanda);
                                     diferenca_maior_demanda = diferenca_maior_demanda-demanda[w];
                                    **Avalia(); // Avalia a função.** // AQUI CHAMO A FUNÇÃO.
                                }
                            }
                         }
                    }
                }

            valores_demandas.clear();

          individuo_sem_melhora ++;

          } // fim_individuo_sem_melhora.
          
          
        } // fim_while_excesso.
        System.out.println("FIM individuo_sem_melhora E retorno para Gerar indivíduo aleatório");

    return  Individuo;   
    }

    
    **public static void Avalia(){** //ESSA É A FUNÇÃO QUE CRIEI DENTRO DA CLASSE.
        System.out.println("Ola Mundo");
        
        for (int w=0; w< numero_medianas; w++){
                if (valores_demandas.get(w) > maior_demanda) {
                    maior_demanda = valores_demandas.get(w); // Armazena a maior demanda da mediana
                    indice_maior_demanda = w;
                    mediana_maior_demanda = medianas.get(indice_maior_demanda);
                }
                diferenca_maior_demanda = maior_demanda - capacidade[w];
    }

}

Há! O nome da função é Avalia e ela é chamada dentro do while:

while (diferenca_maior_demanda >= 0){
         Individuo.set(w, mediana_menor_demanda);
         diferenca_maior_demanda = diferenca_maior_demanda-demanda[w];
         Avalia(); // Avalia a função.** // AQUI CHAMO A FUNÇÃO.
 }

Obrigado!

Vc tentou retirar o static da função Avalia?

Senão, vc pode também chamar pelo nome da classe.

Funções do tipo static não utilizam instancia da classe…

Talvez seja isso,mas não sei que linguagem vc tá usando, e a tolerância para isso.

Olá sgode, obrigado pelo retorno, resolvido…

Tenha um bom dia!