• 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

Object Storage Arubacloud
0 głosów
343 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 573 wizyt
pytanie zadane 18 października 2018 w Java przez blofeld Użytkownik (700 p.)
0 głosów
1 odpowiedź 480 wizyt
pytanie zadane 26 listopada 2016 w Java przez niezalogowany
0 głosów
5 odpowiedzi 688 wizyt
pytanie zadane 11 września 2017 w Java przez Patryk Moros Początkujący (470 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...