PeggyL. Δημοσ. 3 Δεκεμβρίου 2005 Δημοσ. 3 Δεκεμβρίου 2005 Καλησπέρα είμαι φοιτήτρια και κάνω μία εργασία στην java όπου ο χρήστης εισάγει την ημερομηνία γενεθλίων του και το πρόγραμμα υπολογίζει πόσο χρονών είναι. Δηλαδή σύμφωνα με τη σημερινή ημερομηνία 2 Δεκεμβρίου 2005 πρέπει να έχουμε το εξής output: Enter the year you were born: 1980 Enter the month you were born(1-12): 12 Enter the day you were born: 5 You are 24 years, 11 months, and 27 days old. Εχω γράψει κάποια πράγματα και όταν κάνω compile μου βγάζει τα εξής λάθη: Error(62,1): illegal start of expression Error(50,1): malformed expression Error(30,5): non-static variable year cannot be referenced from a static context Error(30,20): non-static variable year cannot be referenced from a static context Παιδεύομαι αρκετή ώρα με τα λάθη και δεν τα καταφέρνω.Θα ήθελα όποιος μπορεί και είναι εύκολο να με βοηθήσει λίγο. Ευχαριστώ πολύ Αυτός είναι ο κώδικας που έχω γράψει: > import jpb.*; public class ComputeAge { int day; int month; int year; final static int currentYear=2005; final static int currentMonth=12; final static int currentDay=2; public static void main(String[] args) { //Prompt the user to enter the year. while(true){ SimpleIO.prompt("Enter the year you were born: "); String userInput=SimpleIO.readLine(); try { int year=Integer.parseInt(userInput); break; }catch(NumberFormatException e) { System.out.println("Please enter only integers: "); } } if((year<1800) || (year>2005)) { System.out.println("Year must be between 1800 and 2005!"); return; } //Prompt the user to enter the day. while(true){ SimpleIO.prompt("Enter the day you were born: "); String userInput2=SimpleIO.readLine(); try{ int day=Integer.parseInt(userInput2); break; }catch(NumberFormatException e) { System.out.println("Please enter only integers: "); } } //Prompt the user to enter the month. while(true){ SimpleIO.prompt("Enter the month you were born(1-12): "); String userInput3=SimpleIO.readLine(); try{ int month=Integer.parseInt(userInput3); break; }catch(NumberFormatException e) { System.out.println("Please enter only integers: "); } } private static int daysInMonth(month,year) { int numberOfDays=31; switch(month+1) { case 2://February numberOfDays=28; if(year%4==0) { numberOfDays=29; if(year%100==0 && year%400 !=0) numberOfDays=28; } break; case 4://April case 6://June case 9://September case 11://November numberOfDays=30; break; } return numberOfDays; } //Compute the age. while(currentDay<day) { int x=currentDay+30; age_day=x-day; SingularPlural(); } while(currentMonth<month) { int y=currentMonth+11; age_month=y-month; SingularPlural(); } while(currentYear<year) { age_year=current_year-year; SingularPlural(); } private static void SingularPlural() { if(day==1) { System.out.print("You are "+age_year+"year,"); }else{ System.out.print("You are "+age_year+"years,"); } if(month==1) { System.out.print(age_month+" month old,"); }else { System.out.print(age_month+" months,"); } if(year==1) { System.out.println("and "+age_day+" day old."); }else { System.out.println("and "+age_day+" days old."); } } } }
Dikemou Δημοσ. 3 Δεκεμβρίου 2005 Δημοσ. 3 Δεκεμβρίου 2005 Κάπου έχεις μπερδέψει τις παρενθέσεις. Αν ξανακάνεις paste τον κώδικα μέσα σε tags ώστε να διατηρηθούν τα tabs, θα βοηθούσε...
Επισκέπτης Δημοσ. 3 Δεκεμβρίου 2005 Δημοσ. 3 Δεκεμβρίου 2005 λοιπον,εχουμε και λεμε.. 1) πρεπει να μαθεις να χρησιμοποιεις tabs αλλιως ο κωδικας σου θα ειναι δυσαναγνωστος.. ;-) 2) γιατι κανεις import jpb.*? :? Σου ειπε ο καθηγητης να χρησιμοποιησεις Jcreator?Εγω για παραδειγμα δεν μπορουσα να τρεξω το προγραμμα γιατι δεν εχω Jcreator...Σε καθε αλλη περιπτωση να το αποφευγεις αυτο..(ο κωδικας δεν ειναι ευκολα μεταφερσιμος..)Αντ'αυτού μπορεις να κανεις import το java.io.* και στη συνεχεια να χρησιμοποιησεις ρευματα η readers..π.χ. αντι για SimpleIO.prompt("Enter the year you were born: "); θα εγραφες System.out.println("Enter the year you were born: "); αντι για String userInput2=SimpleIO.readLine(); θα εγραφες BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String userInput=br.readLine(); 3) εχεις κανει ενα χοντρο λαθος..εχεις δηλωσει μεθοδους μεσα στη main()..ποιος σου το ειπε αυτο?γιαυτο και σου χτυπαει(και οχι μόνο) compilation error.. 4) προσπαθεις να προσπελασεις τις μεταβλητες κλασης (βλεπε day,month,year με λαθος τροπο..)πρεπει πρωτα να δηλωσεις στιγμιοτυπο της κλασης σου Π.χ ComputeAge ca1=new ComputeAge(); ca1.year=Integer.parseInt(userInput); και να εχεις προσβαση σ'αυτές μεσω του στιγμιοτυπου... 5) ο κωδικας περιεχει λογικα λαθη οσον αφορα τον υπολογισμο της ηλικιας.. τη μεθοδο daysInMonth() που τη καλεις;με τι ορισματα και γιατι σου επιστρεφει(ξερω γιατι σου επιστρεφει...) numberOfDays ...δηλαδη την τιμη της επιστροφης που την αποθηκευεις?πουθενα μαλλον.... 6) λαθος και ο τροπος κλησης των μεθοδων σου...καλεις μεθοδο χωρις να εχεισ φτιαξει στιγμιοτυπο...(βλεπε 4) 7) η μεθοδος singularPlural(εκτος του οτι καλειται χωρις instance-(στιγμιοτυπο) ) καλειται 3 φορες σε 3 while (λαθος...)..θα μπορουσες να τη καλεσεις μια φορα με τρια ορισματα και αναλογα να σου τυπωνει αυτα που θες.. 8) και αλλα(λιγοτερο σοβαρα..) ,αλλα τωρα πρεπει να φυγω.... 9) σου στελνω με pm το κωδικα σου ...(τροποποιημενο..δεν ξερω αν θα το καταλαβεις...)..να εχεις υποψιν σου οτι δεν υπολογιζει ηλικια(λογικα λαθη....)...δεν εχω χρονο να το κοιταξω τωρα ..ισως αυριο...ποτε ληγει η προθεσμια παραδοσης? 10) μπορει να λεω και καμια μαλακια γιατι το κοιταξα βιαστικα... take care (και ανοιξε και κανα βιβλιο που και που...καλο θα σου κανει!! )
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.