• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prośba o sprawdzenie kodu Java

VPS Starter Arubacloud
0 głosów
323 wizyt
pytanie zadane 22 maja 2017 w Java przez anntru Nowicjusz (180 p.)
Hej wszystkim

Bardzo proszę Was o pomoc. Proszę o sprawdzenie mojego kodu i podpowiedź jak to dokończyć.

Mianowicie założenia są takie aby program, na podstawie danych o dacie narodzin, płci i kondycji, wyświetlał szacowaną ilosc uderzeń serca człowieka od momentu urodzenia do chwili obecnej. Niezbędne informacje, takie jak średnia ilość bicia serca biorę z wikipedii (wpisuję tętno).

Granice faz życia przed dorosłością przyjęłam jako stałe.

Moim problemem jest tablica ( przedstawiająca ilość uderzeń serca) na końcu mojego kodu, nie wiem jak 'podpiąć' ją z kondycją oraz przedziałem życia dorosłego.

Wiem, że kod jest prymitywny i wstydzę się go trochę, ponieważ wiem, że można to lepiej napisać ale jest to mój pierwszy kod po 'Hello World' bardzo proszę o cierpliwość i wyrozumiałość!

 

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class AgeCalc {

        public static void main(String[] args)throws Exception
        {
// read inputs
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter your date of birth DD-MM-YYYY: ");
        String dob=sc.next();
        
        
        //convert String date value to java.until.Date class obj
        SimpleDateFormat sdf1=new SimpleDateFormat("dd-mm-yyyy");
        Date udob=sdf1.parse(dob);
        
        //get system date
        Date sysdate=new Date();
        
        //calculate age  
        
        long milis=System.currentTimeMillis()-udob.getTime();
        
        long secLife = milis/1000;
        long minLife = secLife/60;
        double years = minLife / 365.2425 / 24 / 60;  
        
        System.out.println("You lived: " +secLife + " seconds and " + minLife + " minutes. You are " + years + " years old");  
         
        final double embryo ;  // 365/12 = 30,417, 9 months
        embryo = (30.417 * 9 * 24 * 60) * ((110+150)/2) ;   
        
        final int baby; // 0-2 years
        baby = (int) (embryo + (365 * 2 * 24 * 60));  
        
        final int child; //2-12 years
        child = baby + (365 * 11 * 24 * 60 );  
        
        final int teenager; //13-17 years
        teenager = child + (365 * 5 * 24 * 60);
        
                
        sc.nextLine();
        
        int period;
        int periodOfLife;
        {
            if(years>65)
            {
                period = 6;        
            }
            else if(years>=56 && years<=65)
            {
                period = 5;
            }
            else if(years>=46 && years<=55)
            {
                period = 4;
            }
            else if(years>=36 && years<=45)
            {
                period = 3;
            }else if(years>=26 && years<=35)
            {
                period = 2;
            }
            else if(years>=18 && years<=25)
            {
                period = 1;
            }
            // return; - don't know if I need this  
        }
        
        
        
        System.out.print("If you are a woman type letter 'w', If you are a man type letter 'm': ");  
        String sex=sc.next();
        
    
        boolean w = true;
        
        
        if (w) {
            System.out.print("Your contition is: 1 - performance, 2 - perfect, 3 - good, 4 - above average, 5 - average, 6 - poor, 7 - bad: " );
            int condition = sc.nextInt();   }
            
            else {
                System.out.print("Your contition is: 1 - performance, 2 - perfect, 3 - good, 4 - above average, 5 - average, 6 - poor, 7 - bad: " );
                int condition = sc.nextInt();
            }
        
        
        
        class arrays
        {
            int[][] men = {{55,54,56,57,56,55},    // int[row][col]
                    {61,61,62,63,61,61},
                    {65,65,66,67,67,65},
                    {69,70,70,71,71,69},
                    {73,74,75,76,75,73},
                    {81,81,82,83,81,79},
                    {83,83,84,85,83,81}};    
            int[][] women = {{60,59,59,60,59,59},
                    {65,64,64,65,64,64},
                    {69,68,69,69,68,68},
                    {73,72,73,73,73,72},
                    {78,76,78,77,77,76},
                    {84,82,84,83,83,84},
                    {86,84,86,85,85,85}};
        
         
         
        }
        }
    
}
2
komentarz 22 maja 2017 przez KubenQPL Maniak (62,820 p.)
Używaj bloczku "code" i do niego wrzucaj kod

1 odpowiedź

0 głosów
odpowiedź 22 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)

Prawdopodobnie simpleDateFormater bedzie działać ci źle. Miesiące zapisuje się jako M a rok raczej jako Y. 

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

Po drugie wychodzą Ci duże liczby. I jestem prawie pewnien że masz przeładowanie na intach. Zmień na long albo na double.

W ifach możesz uprościć warunki. Tzn np możesz sprawdzić czy jest wieksze nisz 65 a potem czy wieksze nisz 56 bez sprawdzania czy jest mniejsze niz 65 bo gdyby było znalazł byś sie w pierwszym ifie.

Nie rozumiem po co masz dwa takie same wyrażenia i w ifie i w elsie

        
        if (w) {
            System.out.print("Your contition is: 1 - performance, 2 - perfect, 3 - good, 4 - above average, 5 - average, 6 - poor, 7 - bad: " );
            int condition = sc.nextInt();   }
            
            else {
                System.out.print("Your contition is: 1 - performance, 2 - perfect, 3 - good, 4 - above average, 5 - average, 6 - poor, 7 - bad: " );
                int condition = sc.nextInt(); 
            }

A jak dostać się do tablicy? Użyj statica

komentarz 22 maja 2017 przez anntru Nowicjusz (180 p.)
Dzięki za odpowiedź!

Datę zapisałam jako MM a rok jak YYYY, więc nie rozumiem.

A ify i elsy są tak zapisane bo chodzi o to, że tętno kobiety i mężczyzny będą się różniły od siebie i myślałam że tam jakoś od razu podłączyć tablicę. Właśnie wydawało mi się trochę bez sensu, że 2 razy to samo.

Nie rozumiem w jakim sensie statica?
komentarz 22 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)

SimpleDateFormat("dd-mm-yyyy"); <- masz tu mm i yyyy a nie MM i YYYY :)

static w sensie

        class arrays
        {
            static int[][] men = {{55,54,56,57,56,55},    // int[row][col]
                    {61,61,62,63,61,61},
                    {65,65,66,67,67,65},
                    {69,70,70,71,71,69},
                    {73,74,75,76,75,73},
                    {81,81,82,83,81,79},
                    {83,83,84,85,83,81}};    
           static int[][] women = {{60,59,59,60,59,59},
                    {65,64,64,65,64,64},
                    {69,68,69,69,68,68},
                    {73,72,73,73,73,72},
                    {78,76,78,77,77,76},
                    {84,82,84,83,83,84},
                    {86,84,86,85,85,85}};
        
         
         
        }      
    

/// gdzieś indziej w kodzie

int pulse = arrays.women[2][3] 

 

komentarz 22 maja 2017 przez anntru Nowicjusz (180 p.)
O rany racja, wybacz :D ale to akurat działa mi ok.

A z tym staticem to nie wiem własnie za bardzo o co chodzi bo próbowałam tak ale nie wiedziałam jak mam zadeklarować puls kobiety i mężczyzny (nie wiem czy dobrego jezyka używam, ale mam nadzieję, że mnie zrozumiesz). Chodzi o to, że :

int pulse = arrays.women[2][3]

nie działa, pokazuje mi błąd.

Podobne pytania

0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 18 października 2018 w Java przez blofeld Użytkownik (700 p.)
0 głosów
1 odpowiedź 474 wizyt
pytanie zadane 26 listopada 2016 w Java przez niezalogowany
0 głosów
5 odpowiedzi 653 wizyt
pytanie zadane 11 września 2017 w Java przez Patryk Moros Początkujący (470 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...