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:
- Poste o código fonte de suas classes, é complicado adivinhar como você implementou;
- 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);