Rozbudowanie programu do obliczania BMI

0

Witam wszystkich użytkowników!
Zakładam ten temat z jednego prostego powodu, zawsze chciałem spróbować swoich sił w programowaniu lecz nie zawsze starczało mi na to odwagi. Ostatecznie zmobilizowany i pełen nadziei myślę że uda mi się osiągnąć ten cel, jednak w pojedynkę niczego nie zwojuję, dlatego wspólnie z waszą pomocą (taką mam nadzieję :) ) zdołam poradzić sobie z tą trudną dziedziną jaką jest programowanie.

W temacie tym chciałbym powoli rozszerzać swoje horyzonty, na wstępie zaznaczam że z programowaniem miałem styczność w szkole średniej, deczko na studiach i przy okazji pisania jakiś prostych skryptów do serwerów jednej z popularnych gier mmorpg.

Na początek chcę zacząć od podstaw javy, html, by potem powoli przejść na pisanie apek na androida - taki jest ambitny cel.
Na początek bazuję na:
https://www.youtube.com/watch[...]list=UUBmjr_qvB6fDl8EA2kWYKFQ
oraz książeczka:
"Android w praktyce" Charlie Collins, Michael Galpin, Matthias Kaeppler

Wykonałem już kilka lekcji i oto pojawia się pierwszy problem:

Pracuje na kodzie do obliczania BMI, próbuje go na własny sposób rozbudowywać bo słyszałem że w taki sposób najlepiej się uczyć, także proszę oto kod, a zagadnienie do niego pod nim.

package poczatek;

import java.util.Scanner;

public class BMIrozbudowane {

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Witaj użytkowniku, w tym programie obliczysz swoje BMI, na początek proszę podaj mi swoje imię...");
        String imie = input.nextLine();
        System.out.println("Witaj " + imie);

        System.out.println(imie + " proszę podaj mi swój wiek...");
        int wiek = input.nextInt();
//      System.out.println("Twoj wiek to " + wiek);

        if (wiek<10)
        {
            System.out.println("Przykro mi jesteś zbyt młody/a, wynik badania będzie niewiarygodny");
        }

        else if (wiek>100)

        {
            System.out.println("Maksymalny wiek do wykonania badanie nie możę być większy niż 100");
        }

        else 
        {
            System.out.println("Twoj wiek to " + wiek);
        }

        System.out.println(imie + " teraz proszę podaj swój wzrost w cm...");
        double wzrost = input.nextDouble();
        System.out.println("Podaj teraz swoją wagę w kg...");
        double waga = input.nextDouble();

        wzrost = wzrost / 100;
        double bmi = (waga/Math.pow(wzrost, 2));

        if (bmi<18.5)
        {
            System.out.println("Jesteś zbyt szczupły, Twój indkes BMI wynosi: " + bmi); 
        }

        else if (bmi>25.0)
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i nie mieści się w normie, czas na odchudzanie!");
        }

        else
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i jest on prawidłowy, gratulacje!");
        }
    }

}

Jakie polecenie zastosować żeby po podaniu zbyt małego lub zbyt dużego wieku, program zawrócił i od początku przeszedł do kwestii podania poprawnego wieku ?
Bo aktualnie to on idzie dalej i nie patrzy na to co się wpisuje :/

P.S Mam nadzieję że dział "Newbie" jest odpowiednim miejscem do założenia tego tematu.

2

Co kto lubi, może być while/ do while

1
    private int getAge(Scanner input) {
        while (true) {
            int wiek = input.nextInt();
            if (wiek < 10) {
                System.out.println("Przykro mi jesteś zbyt młody/a, wynik badania będzie niewiarygodny");
            }
            else if (wiek > 100)
            {
                System.out.println("Maksymalny wiek do wykonania badanie nie możę być większy niż 100");
            }
            else{
                return wiek;
            }
        }
    }

PS. o ile dział dobry, to temat nic nie mówi o problemie.

0
package poczatek;

import java.util.Scanner;

public class BMIrozbudowane {

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Witaj użytkowniku, w tym programie obliczysz swoje BMI, na początek proszę podaj mi swoje imię...");
        String imie = input.nextLine();
        System.out.println("Witaj " + imie);

        System.out.println("Podaj swój wiek...");
        int wiek = input.nextInt();
        System.out.println(imie + "Twoj wiek to " + wiek);

        private int getAge(Scanner input) //LINE 18 - MULTIPLE MARKERS AT THIS LINE 
        {
            while (true) {
                int wiek = input.nextInt();
                if (wiek < 10) { //LINE 21 - DUPLICATE LOCAL VARIABLE WIEK
                    System.out.println("Przykro mi jesteś zbyt młody/a, wynik badania będzie niewiarygodny");
                }
                else if (wiek > 100)
                {
                    System.out.println("Maksymalny wiek do wykonania badanie nie możę być większy niż 100");
                }
                else{
                    return wiek; //LINE 31 - VOID METHOTDS CANNOT RETURN A VAULE
                }
            }
        }

        System.out.println(" teraz proszę podaj swój wzrost w cm...");
        double wzrost = input.nextDouble();
        System.out.println("Podaj teraz swoją wagę w kg...");
        double waga = input.nextDouble();

        wzrost = wzrost / 100;
        double bmi = (waga/Math.pow(wzrost, 2));

        if (bmi<18.5)
        {
            System.out.println("Jesteś zbyt szczupły, Twój indkes BMI wynosi: " + bmi); 
        }

        else if (bmi>25.0)
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i nie mieści się w normie, czas na odchudzanie!");
        }

        else
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i jest on prawidłowy, gratulacje!");
        }
    }

}

Zastosowałem Twój kod i męczę się od 15 minut z 3 błędami, czy ktoś z was może mi powiedzieć dlaczego nie chce banglać?
line 18,21,30

0

@Adii69 - skoro jesteś tutaj nowy i masz zamiar chwilę posiedzieć w tym serwisie, to zapamiętaj, że:

  • wątki należy tytułować sensownie i opisowo,
  • w tagach umieszczaj jedynie nazwy języków, technologii itd., bez śmieci typu pomoc czy programowanie,
  • używaj znaczników do kolorowania składni kodu, odpowiednich dla danego języka,
  • używaj znaczników do formatowania treści postów, aby problem przedstawić ładnie i czytelnie,
  • przeznaczaj jeden wątek na jeden problem;
    Jeżeli nie będziesz się do tego stosował, to Twoje wątki mogą być przenoszone do Kosza, gdzie zakończą swój żywot; Dlatego też Twój pierwszy post nieco poprawiłem, bo źle użyłeś znacznika pogrubienia (który zadziałał jako wypunktowanie) oraz poprawiłem tytuł wątku; To w sumie tyle.
0

Po przeredagowaniu kilkunastu stron doszedłem gdzie był mój błąd, już wiem że zrobiłem karygodny błąd poprzez wrzucenie metody do main'a - proszę o wyrozumiałość, dopiero się uczę.

I teraz mam taki problem że nie za bardzo wiem jak mam to opisać żeby to uruchomić (tzn. żeby po wpisaniu nieprawidłowego wieku cofało program do stanu w którym znów możemy to zrobić) Jeżeli znalazła by się osoba która chciała by mi to na tym przykładzie wytłumaczyć byłbym bardzo wdzięczny, a oto twór który powstał w moim eclipse:

package poczatek;

import java.util.Scanner;

public class BMIrozbudowane {

    private int getAge(Scanner input) 
    {
        while (true) 
        {
            int wiek = input.nextInt();
            if (wiek < 10) 
            {
                System.out.println("Przykro mi jesteś zbyt młody/a, wynik badania będzie niewiarygodny");
            }
            else if (wiek > 100)
            {
                System.out.println("Maksymalny wiek do wykonania badanie nie możę być większy niż 100");
            }
            else{
                return wiek;
            }
        }
    }

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Witaj użytkowniku, w tym programie obliczysz swoje BMI, na początek proszę podaj mi swoje imię...");
        String imie = input.nextLine();
        System.out.println("Witaj " + imie);

        System.out.println("Podaj swój wiek...");
        int wiek = input.nextInt();

//      if (wiek<10)
//      {
//          System.out.println("Przykro mi jesteś zbyt młody/a, wynik badania będzie niewiarygodny");
//          while (wiek<8);
//      }
//      
//      else if (wiek>100)
//      
//      {
//          System.out.println("Maksymalny wiek do wykonania badanie nie możę być większy niż 100");
//          while (wiek>100);
//      }
//      
//      else 
//      {
//          System.out.println("Twoj wiek to " + wiek);
//      }

        System.out.println(imie + " teraz proszę podaj swój wzrost w cm...");
        double wzrost = input.nextDouble();
        System.out.println("Podaj teraz swoją wagę w kg...");
        double waga = input.nextDouble();

        wzrost = wzrost / 100;
        double bmi = (waga/Math.pow(wzrost, 2));

        if (bmi<18.5)
        {
            System.out.println("Jesteś zbyt szczupły, Twój indkes BMI wynosi: " + bmi); 
        }

        else if (bmi>25.0)
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i nie mieści się w normie, czas na odchudzanie!");
        }

        else
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i jest on prawidłowy, gratulacje!");
        }
    }

}

kawałek starego skryptu wziąłem za //

1

Serio?

int wiek = getAge(new Scanner(System.in));

albo input ten Twój tam przekazać;

0

tutaj masz pętle :

Scanner scan = new Scanner(System.in);

        System.out.println("Ile masz lat?");
        int i = scan.nextInt();

        while(i < 10 || i > 100)
        {
            System.out.println("Zle dane, podaj jeszcze raz");
            i = scan.nextInt();
        }

Tylko zwróc uwage, że nie sprawdzana jest poprawność danych podawanych przez użytkownika - jeśli poda sie tam cośczego nie da się przekształcić na liczbę całkowitą to program się sypnie.

0

Także po ciężkich bojach wygląda mniej więcej tak:

package poczatek;

import java.util.Scanner;

public class BMIrozbudowane {

    private static int getAge(Scanner input) 
    {
        while (true) 
        {
            int wiek = input.nextInt();
            if (wiek < 8) 
            {
                System.out.println("Przykro mi ale jesteś za młody/a by obliczyć Twoje BMI, minimalny wiek badanego to 8 lat. Jeżeli chcesz kontynuwać badanie wprowadź poprawny wiek.");
            }
            else if (wiek > 100)
            {
                System.out.println("Przykro mi ale maksymalny wiek do wykonania badania to 100 lat. Jeżeli chcesz kontynuwać badanie wprowadź wiek z zakresu od 8 do 100 lat.");
            }
            else{
                return wiek;
            }
        }
    }

    private static int getWeight(Scanner input) 
    {
        while (true) 
        {
            int Weight = input.nextInt();
            if (Weight < 20) 
            {
                System.out.println("Zbyt niska waga, wprowadź prawidłową wartość.");
            }
            else if (Weight > 200)
            {
                System.out.println("Zbyt wysoka waga, wprowadź prawidłową wartość.");
            }
            else{
                return Weight;
            }
        }
    }

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Witaj użytkowniku, w tym programie obliczysz swoje BMI, na początek proszę podaj mi swoje imię...");
        String imie = input.nextLine();
        System.out.println("Witaj " + imie);

        System.out.println("Podaj swój wiek...");
        int wiek = getAge(new Scanner(System.in));
        System.out.println("Zadeklarowałeś/aś że masz " + wiek + " lat.");

            if (wiek<15)
            {
            System.out.println("Jesteś jeszcze bardzo młody/a, wartość Twojego BMI ulega szybkiej zmianie.");
            }
            else if (wiek>15 || wiek<80)
            {
                System.out.println("W tym wieku wartość Twojego BMI ulega standardowej zmianie.");
            }
            else if (wiek>80)
            {
                System.out.println("W tym wieku wartość Twojego BMI ulega powolnej zmianie.");
            }

        System.out.println(imie + " teraz proszę podaj swój wzrost w cm...");
        double wzrost = input.nextDouble();
        System.out.println("Podaj teraz swoją wagę w kg...");
        int waga = getWeight(new Scanner(System.in));

        wzrost = wzrost / 100;
        double bmi = (waga/Math.pow(wzrost, 2));

        if (bmi<18.5)
        {
            System.out.println("Jesteś zbyt szczupły, Twój indkes BMI wynosi: " + bmi); 
        }

        else if (bmi>25.0)
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i nie mieści się w normie, czas na odchudzanie!");
        }

        else
        {
            System.out.println("Twój indeks BMI wynosi " + bmi + " i jest on prawidłowy, gratulacje!");
        }
        input.close();
    }

}

W praktyce wygląda to tak:

Witaj użytkowniku, w tym programie obliczysz swoje BMI, na początek proszę podaj mi swoje imię...
Adrian
Witaj Adrian
Podaj swój wiek...
6
Przykro mi ale jesteś za młody/a by obliczyć Twoje BMI, minimalny wiek badanego to 8 lat. Jeżeli chcesz kontynuwać badanie wprowadź poprawny wiek.
120
Przykro mi ale maksymalny wiek do wykonania badania to 100 lat. Jeżeli chcesz kontynuwać badanie wprowadź wiek z zakresu od 8 do 100 lat.
25
Zadeklarowałeś/aś że masz 25 lat.
W tym wieku wartość Twojego BMI ulega standardowej zmianie.
Adrian teraz proszę podaj swój wzrost w cm...
175
Podaj teraz swoją wagę w kg...
4
Zbyt niska waga, wprowadź prawidłową wartość.
5
Zbyt niska waga, wprowadź prawidłową wartość.
1200
Zbyt wysoka waga, wprowadź prawidłową wartość.
75
Twój indeks BMI wynosi 24.489795918367346 i jest on prawidłowy, gratulacje!

Do poprawienia/rozbudowania jeszcze wiele rzeczy m.in poprawność danych podawanych przez użytkownika, bo na tym się program wysypuje, ale to już w następnych "odcinkach" :D

Dziękuję wszystkim za wkład, mam nadzieję również że tym temat pomogłem innym "newbie" w nauce javy od podstaw, pozdrawiam ;)

Acha, i jeżeli macie jakieś propozycje odnośnie, co poprawić, jak skracać kod by był bardziej czytelny i przejrzysty to czekam na propozycje i podpowiedzi.

zamiana znacznika <quote> na <code class="none"> - @furious programming

0

@up jakimś cudem napisałem z niezalogowanego konta :P, proszę o usunięcie tego wpisu powyżej (ja nie mogłem)

Witam, po kilku lekcjach z powrotem powróciłem do mojego programu od BMI, jednak po 2 godzinach szukania sposobu poddaję się - jeszcze jestem za słaby w te klocki, żeby samemu do takich rzeczy dochodzić :P

Może ktoś mi powiedzieć w jaki sposób zablokować wpisywanie liter (lub cyfr)?

Np. kiedy program prosi mnie o podanie wieku, a ja wpisuję np. "absa" to wyrzuca błąd i całość się crashuje ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0