Método na classe não pode ser aplicado a tipos

Fala pessoal, sou novo aqui mas ja trago uma duvida, estou a fazer um trabalho onde tenho q criar um sistema de refeições que distribui marmitex para empresas da região, toda refeição montada deve ser balanceada em termos nutricionais, separados em refeiçoes diarias, como lanche e almoço. O lanche tem seus valores nutricionais maximo e o almoco tb tem seus valores nutricionais, criei duas classes e criei os metodos para verificar os termos nutricionais de cada refeição informada. Quando chamo o metodo no main, me aparece o seguinte erro : method Verifica in class Almoco cannot be applied to given types

Você está passando o tipo de parâmetro errado para o método Verifica da classe Almoco.

Dicas:

  1. Poste o código fonte de suas classes, é complicado adivinhar como você implementou;
  2. Procure utilizar nomes de métodos e variáveis começando com letra minúscula e nomes de classes começando com letra maiúscula.

Classe Almoco:

public class Almoco extends Refeicao
{
    public Almoco(ArrayList<Ingrediente> ingredientes){
        super(ingredientes);
    }
    
    public String Verifica(){               
        double somaFibras = 0;
        double somaSodio = 0;
        for(Ingrediente i: ingredientes){
            somaFibras += i.getFibras();
            somaSodio += i.getSodio(); 
            
            if(i.getCarbo() > 60){
                 return "Carboidratos ultrapassou 60%";
            }
            if (i.getProteina() > 15){
                 return "Proteina ultrapassou 15%";            
            }
            if(i.getGorduraTotal() > 25){
                 return "Gordura total ultrapassou 25%";
            }
            if(i.getGorduraSaturada() >= 10){
                 return "Gordura saturada ultrapassou 10%";
            }
            if(somaFibras < 7 || somaFibras > 10){
                return "Fibra foi menor que 7g ou maior que 10g";
            }
            if (somaSodio < 720 || somaSodio > 960){
                return "Sodio foi menor que 720mg ou maior que 960mg";
            }
        }
        
        return "APROVADO \n";
    }

}

Classe Desjejum/lanche:

public class Desjejum extends Refeicao
{
    public Desjejum(ArrayList<Ingrediente> ingredientes){
        super(ingredientes);
    }
    
    public String Verifica(){               
        double somaFibras = 0;
        double somaSodio = 0;
        for(Ingrediente i: ingredientes){
            somaFibras += i.getFibras();
            somaSodio += i.getSodio(); 
            
            if(i.getCarbo() > 60){
                 return "Carboidratos ultrapassou 60%";
            }
            if (i.getProteina() > 15){
                 return "Proteina ultrapassou 15%";            
            }
            if(i.getGorduraTotal() > 25){
                 return "Gordura total ultrapassou 25%";
            }
            if(i.getGorduraSaturada() >= 10){
                 return "Gordura saturada ultrapassou 10%";
            }
            if(somaFibras < 4 || somaFibras > 5){
                return "Fibra foi menor que 4g ou maior que 5g";
            }
            if (somaSodio < 360 || somaSodio > 480){
                return "Sodio foi menor que 360mg ou maior que 480mg";
            }
        }
        
        return "APROVADO \n";
    }
}

Classe Principal :

public class Principal
{
    static Scanner ler = new Scanner(System.in);
    
    //INICIA MENU;
    public static int mostraMenu(){
        System.out.println("ESCOLHA UMA REFEIÇÃO:");
          System.out.println("1)Desjejum/Lanche");
          System.out.println("2)Almoco/Janta");        
          System.out.println("3)Sair");
          System.out.println("-------------------------- \n");
         return ler.nextInt();        
    }
    
    
    //METODO QUE VERIFICA A REFEICAO DESJEJUM;
    public static void verificarDesjejum(ArrayList<Ingrediente> ingredientes){
        System.out.println("Informe a refeição que deseja: ");
        String nome = ler.next();
        System.out.println("-------------------------- \n");
        Desjejum d = new Desjejum(ingredientes);
        
    
       for(int i = 0; i< ingredientes.size();i++){
            Ingrediente in = ingredientes.get(i);
            //faltando os argumentos na chamada de método.
                   
            System.out.println("Informe a quantidade em porcentagem de carboidrato que contem: ");
            double carbo = ler.nextDouble();
            System.out.println("-------------------------- \n");
            in.setCarbo(carbo);
            
            System.out.println("Informe a quantidade em porcentagem de proteina que contem: ");
            double prot = ler.nextDouble();
            System.out.println("-------------------------- \n");
            in.setProteina(prot);
            
            System.out.println("Informe a quantidade em porcentagem de gordura total que contem: ");
            double gordTotal = ler.nextDouble();
            System.out.println("-------------------------- \n");
            in.setGorduraTotal(gordTotal);
            
            System.out.println("Informe a quantidade em porcentagem de gordura saturada que contem: ");
            double gordSat = ler.nextDouble();
            System.out.println("-------------------------- \n");
            in.setGorduraSaturada(gordSat);
            
            System.out.println("Informe a quantidade de gramas de fibras que contem: ");
            int fibras = ler.nextInt();
            System.out.println("-------------------------- \n");
            in.setFibras(fibras);
            
            System.out.println("Informe a quantidade de miligramas de sodio que contem: ");
            int sodio = ler.nextInt();
            System.out.println("-------------------------- \n");
            in.setSodio(sodio);
            
            //faltando os argumentos na chamada de método.
            d.Verifica();
            
            System.out.println("bon appétit");

       }
      
    }
    
    //METODO QUE VERIFICA A REFEICAO ALMOCO;
    public static void verificarAlmoco(ArrayList<Ingrediente> ingredientes){
        System.out.println("Informe o ingrediente que deseja: ");
        String almoco = ler.next();
        System.out.println("-------------------------- \n");
        Almoco a = new Almoco(ingredientes);
        

            for(Ingrediente i : ingredientes){          
                System.out.println("Informe a quantidade de carboidrato que contem: ");
                double carbo = ler.nextDouble();
                System.out.println("-------------------------- \n");
                i.setCarbo(carbo);
                
                System.out.println("Informe a quantidade de proteina que contem: ");
                double prot = ler.nextDouble();
                System.out.println("-------------------------- \n");
                i.setProteina(prot);
                
                System.out.println("Informe a quantidade de gordura total que contem: ");
                double gordTotal = ler.nextDouble();
                System.out.println("-------------------------- \n");
                i.setGorduraTotal(gordTotal);
                
                System.out.println("Informe a quantidade de gordura saturada que contem: ");
                double gordSat = ler.nextDouble();
                System.out.println("-------------------------- \n");
                i.setGorduraSaturada(gordSat);
                
                System.out.println("Informe a quantidade de fibras que contem: ");
                int fibras = ler.nextInt();
                System.out.println("-------------------------- \n");
                i.setFibras(fibras);
                
                System.out.println("Informe a quantidade de sodio que contem: ");
                int sodio = ler.nextInt();
                System.out.println("-------------------------- \n");
                i.setSodio(sodio);
                
                a.Verifica(carbo);
                
                System.out.println("bon appétit");
        }
    }

CRIANDO MENU;

public static void main (String args[]){
    ArrayList<Ingrediente> ingredientes = new ArrayList<Ingrediente>(2);
    
    
    int menu = 0;
    while (menu != 3){
      
      menu = mostraMenu();
      
      if (menu == 1){            
        verificarDesjejum(ingredientes);            
      }
      if (menu == 2){
        verificarAlmoco(ingredientes);
      }
    }       
    }
}

o método verifica não poderia ser um abstrato na classe refeição?

nao, porque eu tenho diferentes refeiçoes e valores diferentes, ai para simplificar acabei fazendo ambas as classes

Vc não definiu o tipo da lista, exemplo:

ArrayList<Ingrediente> ingredientes;
ingredientes = new ArrayList<Ingrediente>();

Ou vc altera todas as listas para Ingrediente, ou no método verifica altera o for para Object:

for(Object o : ingredientes){
    Ingrediente i = (Ingrediente) o;

onde devo definir essa lista ? ja que descrevi uma por parametro

public static void verificarDesjejum(ArrayList ingredientes)

public static void verificarDesjejum(ArrayList<Ingrediente> ingredientes)

Em todos os ArrayList vc deve indicar o tipo

public Almoco(ArrayList<Ingrediente> ingredientes){

public Desjejum(ArrayList<Ingrediente> ingredientes){

ArrayList<Ingrediente> ingredientes;
public Refeicao(ArrayList<Ingrediente> ingredientes){
    this.ingredientes = ingredientes;

É exatamente por isso que ele deveria ser abstrato na classe Refeicao
Por falar nisso, você não postou o fonte da classe Refeicao.

O seu método possui a seguinte assinatura:

// assinatura do método NÃO possui parâmetros
public String Verifica()

Entretanto você está invocando assim:

// Você está passando carbo como parâmetro
// mas o método não espera receber parâmetros
a.Verifica(carbo);
1 curtida