Obliczenia BMI (Java)
Podstawy teoretyczne zostały podane tutaj:
- Obliczenia związane z dietami (1)
- Obliczenia związane z dietami (2)
- Obliczenia związane z dietami (3)
Aplikacja desktopowa
Klasa BMI
package bmi; public class BMI{ public static final int WE_BIALKO = 4;// w kcal public static final int WE_TLUSZCZ = 9;// w kcal public static final int WE_CUKIER = 4;// w kcal public static final int WE_1KG_TLUSZCZ = 7000;//w kcal public static final String[] PLEC = {"M", "K"}; public static final String[] STAN_ODZYWIENIA = {"NIEDOZYWIENIE", "NORMA", "NADWAGA", "OTYLOSC_I", "OTYLOSC_II", "OTYLOSC_III"}; public static final String[] TYP_OTYLOSCI = {"BEZ_OTYLOSCI", "BRZUSZNA", "POSLADKOWO_UDOWA"}; public static final String[] TRYB_ZYCIA = {"LEZACY", "SIEDZACY", "UMIARKOWANY", "SREDNI", "INTENSYWNY"}; public static final String[] BUDOWA_CIALA = {"DROBNA", "PRZECIETNA", "MASYWNA"}; private double wagaAkt; private double wzrost; private int wiek; private String plec; private double obwodPepka; private double obwodBioder; private double bmi; private String stanOdzywienia; private double whr; private String typOtylosci; private double wagaMax; private double wagaMin; private double wagaOpt; private double nadwaga; private String trybZycia; private String budowa; private int Epodst; private int Eaktyw; private int Ewiek; private int Ebud; private int Eopt; private int szybkoscOdchudzania;//kcal/24h private int Ediety; private int nadwyzkaKalorii; private int czasOdchudzania; public BMI(double wagaAkt, double wzrost, int wiek, String plec, double obwodPepka, double obwodBioder, String trybZycia, String budowa, int szybkoscOdchudzania){ this.wagaAkt = wagaAkt; this.wzrost = wzrost; this.wiek = wiek; this.plec = plec; this.obwodPepka = obwodPepka; this.obwodBioder = obwodBioder; bmi = obliczBMI(wagaAkt, wzrost); stanOdzywienia = obliczStanOdzywienia(bmi, plec, wiek); whr = whr(obwodPepka, obwodBioder); typOtylosci = obliczTypOtylosci(whr, bmi, plec); wagaMax = wagaMax(wzrost); wagaMin = wagaMin(wzrost); wagaOpt = wagaOpt(wzrost); nadwaga = nadwaga(wagaAkt, wagaOpt); Epodst = obliczEpodst(wagaOpt); Eaktyw = obliczEaktyw(trybZycia, wagaOpt); Ewiek = obliczEwiek(wiek); Ebud = obliczEbud(budowa, Epodst, Eaktyw, Ewiek); Eopt = Epodst + Eaktyw + Ewiek + Ebud; this.szybkoscOdchudzania = szybkoscOdchudzania; nadwyzkaKalorii = (int)(nadwaga * WE_1KG_TLUSZCZ); if(nadwyzkaKalorii > 0){ Ediety = Eopt - szybkoscOdchudzania; if(Ediety < 600){ Ediety = 600; szybkoscOdchudzania = Eopt - Ediety; } } else{ Ediety = Eopt + szybkoscOdchudzania; if(Ediety > 3000){ Ediety = 3000; szybkoscOdchudzania = Ediety - Eopt; } } czasOdchudzania = Math.abs((nadwyzkaKalorii / szybkoscOdchudzania)); } public double getWagaAkt() { return wagaAkt; } public double getWzrost() { return wzrost; } public double getObwodPepka() { return obwodPepka; } public String getPlec() { return plec; } public double getObwodBioder() { return obwodBioder; } public double getBmi() { return bmi; } public String getStanOdzywienia() { return stanOdzywienia; } public double getWhr() { return whr; } public String getTypOtylosci() { return typOtylosci; } public int getSzybkoscOdchudzania() { return szybkoscOdchudzania; } public void setSzybkoscOdchudzania(int szybkoscOdchudzania) { this.szybkoscOdchudzania = szybkoscOdchudzania; } public double getWagaMax() { return wagaMax; } public double getWagaMin() { return wagaMin; } public double getWagaOpt() { return wagaOpt; } public double getNadwaga() { return nadwaga; } public int getWiek() { return wiek; } public String getTrybZycia() { return trybZycia; } public void setTrybZycia(String trybZycia) { this.trybZycia = trybZycia; } public String getBudowa() { return budowa; } public void setBudowa(String budowa) { this.budowa = budowa; } public int getEpodst() { return Epodst; } public void setEpodst(int epodst) { Epodst = epodst; } public int getEaktyw() { return Eaktyw; } public void setEaktyw(int eaktyw) { Eaktyw = eaktyw; } public int getEwiek() { return Ewiek; } public void setEwiek(int ewiek) { Ewiek = ewiek; } public int getEbud() { return Ebud; } public void setEbud(int ebud) { Ebud = ebud; } public int getEopt() { return Eopt; } public void setEopt(int eopt) { Eopt = eopt; } public static int getWeBialko() { return WE_BIALKO; } public static int getWeTluszcz() { return WE_TLUSZCZ; } public static int getWeCukier() { return WE_CUKIER; } public static String[] getBudowaCiala() { return BUDOWA_CIALA; } public void setWagaAkt(double wagaAkt) { this.wagaAkt = wagaAkt; } public void setWzrost(double wzrost) { this.wzrost = wzrost; } public void setWiek(int wiek) { this.wiek = wiek; } public void setPlec(String plec) { this.plec = plec; } public void setObwodPepka(double obwodPepka) { this.obwodPepka = obwodPepka; } public void setObwodBioder(double obwodBioder) { this.obwodBioder = obwodBioder; } public void setBmi(double bmi) { this.bmi = bmi; } public void setStanOdzywienia(String stanOdzywienia) { this.stanOdzywienia = stanOdzywienia; } public void setWhr(double whr) { this.whr = whr; } public void setTypOtylosci(String typOtylosci) { this.typOtylosci = typOtylosci; } public void setWagaMax(double wagaMax) { this.wagaMax = wagaMax; } public void setWagaMin(double wagaMin) { this.wagaMin = wagaMin; } public void setWagaOpt(double wagaOpt) { this.wagaOpt = wagaOpt; } public void setNadwaga(double nadwaga) { this.nadwaga = nadwaga; } private static double obliczBMI(double masa, double wzrost) { return roundToDecimal(masa / Math.pow(wzrost / 100, 2), 1); } private static String obliczStanOdzywienia(double bmi, String plec, int wiek) { String sto = null; if(plec.equals(PLEC[0])){ if(bmi < 18.5){ sto = STAN_ODZYWIENIA[0]; } else if((bmi ≥ 18.5) && (bmi < 25.0)){ sto = STAN_ODZYWIENIA[1]; } else if((bmi ≥ 25.0) && (bmi < 30.0)){ sto = STAN_ODZYWIENIA[2]; } else if((bmi ≥ 30.0) && (bmi < 35.0)){ sto = STAN_ODZYWIENIA[3]; } else if((bmi ≥ 35.0) && (bmi < 40.0)){ sto = STAN_ODZYWIENIA[4]; } else{ sto = STAN_ODZYWIENIA[5]; } } else if(plec.equals(PLEC[1])){ if(wiek < 35){ if(bmi < 18.5){ sto = STAN_ODZYWIENIA[0]; } else if((bmi ≥ 18.5) && (bmi < 25.0)){ sto = STAN_ODZYWIENIA[1]; } else if((bmi ≥ 25.0) && (bmi < 30.0)){ sto = STAN_ODZYWIENIA[2]; } else if((bmi ≥ 30.0) && (bmi < 35.0)){ sto = STAN_ODZYWIENIA[3]; } else if((bmi ≥ 35.0) && (bmi < 40.0)){ sto = STAN_ODZYWIENIA[4]; } else{ sto = STAN_ODZYWIENIA[5]; } } else if(wiek ≥ 35 && wiek < 45){ if(bmi <19.5){ sto = STAN_ODZYWIENIA[0]; } else if((bmi ≥ 19.5) && (bmi < 26.0)){ sto = STAN_ODZYWIENIA[1]; } else if((bmi ≥ 26.0) && (bmi < 30.0)){ sto = STAN_ODZYWIENIA[2]; } else if((bmi ≥ 30.0) && (bmi < 35.0)){ sto = STAN_ODZYWIENIA[3]; } else if((bmi ≥ 35.0) && (bmi < 40.0)){ sto = STAN_ODZYWIENIA[4]; } else{ sto = STAN_ODZYWIENIA[5]; } } else if(wiek ≥ 45 && wiek < 55){ if(bmi < 20.5){ sto = STAN_ODZYWIENIA[0]; } else if((bmi ≥ 20.5) && (bmi < 27.0)){ sto = STAN_ODZYWIENIA[1]; } else if((bmi ≥ 27.0) && (bmi < 30.0)){ sto = STAN_ODZYWIENIA[2]; } else if((bmi ≥ 30.0) && (bmi < 35.0)){ sto = STAN_ODZYWIENIA[3]; } else if((bmi ≥ 35.0) && (bmi < 40.0)){ sto = STAN_ODZYWIENIA[4]; } else{ sto = STAN_ODZYWIENIA[5]; } } else if(wiek ≥ 55 && wiek < 65){ if(bmi < 21.5){ sto = STAN_ODZYWIENIA[0]; } else if((bmi ≥ 21.5) && (bmi < 27.0)){ sto = STAN_ODZYWIENIA[1]; } else if((bmi ≥ 27.0) && (bmi < 31.0)){ sto = STAN_ODZYWIENIA[2]; } else if((bmi ≥ 31.0) && (bmi < 35.0)){ sto = STAN_ODZYWIENIA[3]; } else if((bmi ≥ 35.0) && (bmi < 40.0)){ sto = STAN_ODZYWIENIA[4]; } else{ sto = STAN_ODZYWIENIA[5]; } } else if(wiek ≥ 65){ if(bmi < 22.5){ sto = STAN_ODZYWIENIA[0]; } else if((bmi ≥ 22.5) && (bmi < 28.0)){ sto = STAN_ODZYWIENIA[1]; } else if((bmi ≥ 28.0) && (bmi < 31.0)){ sto = STAN_ODZYWIENIA[2]; } else if((bmi ≥ 31.0) && (bmi < 35.0)){ sto = STAN_ODZYWIENIA[3]; } else if((bmi ≥ 35.0) && (bmi < 40.0)){ sto = STAN_ODZYWIENIA[4]; } else{ sto = STAN_ODZYWIENIA[5]; } } } return sto; } private static String obliczTypOtylosci(double whr, double bmi, String plec) { String to = null; if(bmi ≥ 30){ if(plec.equals(PLEC[0])){ if(whr ≥ 1.0){ to = TYP_OTYLOSCI[1]; } else if(whr < 1.0){ to = TYP_OTYLOSCI[2]; } } else if(plec.equals(PLEC[1])){ if(whr ≥ 0.85){ to = TYP_OTYLOSCI[1]; } else if(whr < 0.85){ to = TYP_OTYLOSCI[2]; } } } else{ to = TYP_OTYLOSCI[0]; } return to; } private static double wagaMin(double wzrost) { return roundToDecimal(19.0 * Math.pow(wzrost / 100, 2), 1); } private static double wagaMax(double wzrost) { return roundToDecimal(25.0 * Math.pow(wzrost / 100, 2), 1); } private static double wagaOpt(double wzrost) { double max = wagaMax(wzrost); double min = wagaMin(wzrost); return roundToDecimal(max - ((max - min) / 2), 1); } private static double nadwaga(double wagaAkt, double wagaOpt) { return roundToDecimal(wagaAkt - wagaOpt, 2); } private static double whr(double obwodPepka, double obwodBioder) { return roundToDecimal(obwodPepka / obwodBioder, 2); } public static double roundToDecimal(double num, int dec) { int multi = (int)Math.pow(10, dec); int temp = (int)Math.round(num * multi); return (double)temp / multi; } private static int obliczEaktyw(String trybZycia, double wagaOpt) { int e = 0; if(trybZycia.equals(TRYB_ZYCIA[0])){ e = 0; } else if(trybZycia.equals(TRYB_ZYCIA[1])){ e = (int)(wagaOpt * 6); } else if(trybZycia.equals(TRYB_ZYCIA[2])){ e = (int)(wagaOpt * 10); } else if(trybZycia.equals(TRYB_ZYCIA[3])){ e = (int)(wagaOpt * 15); } else if(trybZycia.equals(TRYB_ZYCIA[4])){ e = (int)(wagaOpt * 20); } return e; } private static int obliczEpodst(double wagaOpt) { return (int)(wagaOpt * 20); } private static int obliczEwiek(int wiek) { int e = 0; if((wiek > 10) && (wiek < 18)){ e = 400; } if(wiek > 70){ e = -300; } if(wiek > 60){ e = -200; } return e; } private static int obliczEbud(String budowa, int epodst, int eaktyw, int ewiek) { int e = 0; if(budowa.equals(BUDOWA_CIALA[0])){ e = -(int)(0.1 * (epodst + eaktyw + ewiek)); } else if(budowa.equals(BUDOWA_CIALA[2])){ e = (int)(0.1 * (epodst + eaktyw + ewiek)); } else if(budowa.equals(BUDOWA_CIALA[1])){ e = 0; } return e; } public int getEdiety() { return Ediety; } public void setEdiety(int ediety) { Ediety = ediety; } public int getNadwyzkaKalorii() { return nadwyzkaKalorii; } public void setNadwyzkaKalorii(int nadwyzkaKalorii) { this.nadwyzkaKalorii = nadwyzkaKalorii; } public int getCzasOdchudzania() { return czasOdchudzania; } public void setCzasOdchudzania(int czasOdchudzania) { this.czasOdchudzania = czasOdchudzania; } }
Klasa BMIMain
package bmi; public class BMIMain{ public static void main(String[] args) { BMI bmi = new BMI(72, 174, 60, BMI.PLEC[0], 100, 100, BMI.TRYB_ZYCIA[2], BMI.BUDOWA_CIALA[1], 1000); System.out.println("bmi: " + bmi.getBmi()); System.out.println("waga min: " + bmi.getWagaMin()); System.out.println("waga opt:" + bmi.getWagaOpt()); System.out.println("waga max:" + bmi.getWagaMax()); System.out.println("waga aktualna: " + bmi.getWagaAkt()); System.out.println("nadwaga: " + bmi.getNadwaga()); System.out.println("stan odżywienia: " + bmi.getStanOdzywienia()); System.out.println("nadwyzka kalorii: " + bmi.getNadwyzkaKalorii()); System.out.println("energia diety: " + bmi.getEdiety()); System.out.println("czas odchudzania do wartości optymalnej: " + bmi.getCzasOdchudzania()); System.out.println("Epodst: " + bmi.getEpodst()); System.out.println("energia opt: " + bmi.getEopt()); } }
Po uruchomieniu na konsoli zobaczymy:
bmi: 23.8 waga min: 57.5 waga opt:66.6 waga max:75.7 waga aktualna: 72.0 nadwaga: 5.4 stan odżywienia: NORMA nadwyzka kalorii: 37800 energia diety: 998 czas odchudzania do wartości optymalnej: 37 Epodst: 1332 energia opt: 1998