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];
}
}