vagg77 Δημοσ. 14 Απριλίου 2014 Δημοσ. 14 Απριλίου 2014 Παιδια,εχω ενα θεμα.To κομμάτι της εκφώνησης στο οποίο έχω θεμα είναι το εξής : Η main θα δηλώνει μια λίστα στην οποία θα βάλετε ένα αντικείμενο SalariedEmployee και ένα αντικείμενο HourlyEmployee. Στη συνέχεια να θέσετε τα στοιχεία και το μισθό του πρώτου υπαλλήλου καθώς και τα στοιχεία του δεύτερου υπαλλήλου συμπεριλαμβανομένων των ωρών εργασίας και του ωρομισθίου. Τέλος, η main θα πρέπει να εκτελεί ένα βρόχο for στον οποίο για κάθε υπάλληλο θα εμφανίζει το αναγνωριστικό του, το όνομα του, το ΑΦΜ του και το μισθό του, όπως φαίνεται στο παρακάτω παράδειγμα: Employee ID: 1 Employee Name: Gewrgiou Employee AFM: 777777 Employee Payment: 300000 Employee ID: 2 Employee Name: Karamitros Employee AFM: 888888 Employee Payment: 120000 Έχω φτιάξει την main() ως εξής : import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { static int count; public static void main(String argv[]) { List myList = new ArrayList(); Scanner in = new Scanner(System.in); String[] myName = new String[2]; String[] myAFM = new String[2]; for(count=1; count<+2; count++) { System.out.println("Enter name"); myName[count] = in.nextLine(); System.out.println("Enter AFM"); myAFM[count] = in.nextLine(); } for(count=1; count<=2; count++) { System.out.println("Employee ID : " +count); System.out.println("Employee Name : " +myName[count]); System.out.println("Employee AFM : " +myAFM[count]); } } } Δεν ξέρω πως να βάλω τα 2 αντικείμενα που μου ζητάει μέσα στη λίστα γι αυτό και τα όρισα ως πίνακα. (Έχω ήδη κατασκευάσει σε άλλες κλάσεις τις μεθόδους SalariedEmployee και HourlyEmployee). Εκτός αυτού του θέματος όμως, ενώ το compile γίνεται μια χαρά, όταν εκτελώ το πρόγραμμα βγαίνουν τα εξής : Enter name Liverpool Enter AFM 123456 Employee ID : 1 Employee Name : Liverpool Employee AFM : 123456 Employee ID : 2 και μου πετάει το εξής error : java.lang.ArrayIndexOutOfBoundsException: 2 και υπογραμμίζει την πρόταση : System.out.println("Employee Name : " +myName[count]); Δεν βάζω τον κώδικα των άλλων κλάσεων γιατί κάνουν σωστά compile εκτός και αν ζητηθούν. Μπορει κάποιος να με βοηθήσει να βάλω τα αντικείμενα στην Λιστα???? Ευχαριστώ!! Μηπως πρεπει να αρχικοποιήσω τις τιμές και να μην τις διαβάζω από το χρήστη καταρχήν?
Moderators Kercyn Δημοσ. 14 Απριλίου 2014 Moderators Δημοσ. 14 Απριλίου 2014 for(count=1; count<+2; count++)
Luciddream Δημοσ. 14 Απριλίου 2014 Δημοσ. 14 Απριλίου 2014 το error που σου πετάει είναι γιατι προσπαθεί να βάλει το όνομα μέσα στο myname[2] το οποίο δεν υπάρχει. θα πρέπει το for σου να ειναι for (count=0; count<2; count++) για να δουλέψει. απο εκεί και πέρα είναι λίγο μπακαλίστικο όλο αυτό που έχεις κάνει η άσκηση σου ζητάει να φτιάξεις δύο υπαλλήλους μέσα σε δυο διαφορετικά αντικείμενα. αυτα τα αντικείμενα να τα βάλεις μέσα σε μια λίστα, και μετά με ένα for που θα τρέξει μέσα στην λίστα, να διαβάσεις τις μεταβλητές τους (με κάποια μέθοδο που θα εχει το κάθε αντικείμενο)
stikos Δημοσ. 14 Απριλίου 2014 Δημοσ. 14 Απριλίου 2014 Η main θα δηλώνει μια λίστα στην οποία θα βάλετε ένα αντικείμενο SalariedEmployee και ένα αντικείμενο HourlyEmployee Αυτό υποδηλώνει μια κλάση Employee, της οποίας θα φτιάξεις 2 instances και θα περάσεις τις πληροφορίες. Αν τα δυο instances έχουν διαφορετικά πεδία αυτο σημαίνει περισσότερες κλάσεις. Αφου το κάνεις αυτό η λίστα λειτουργεί ως εξής: List<Emplyee> myList = new ArrayList<Emplyee>(); Employee salariedEmployee = new Employee(...); Employee hourlyEmployee = new Employee(...); mylist.add(salariedEmployee); mylist.add(hourlyEmployee); Από εκεί και πέρα θέλεις ένα for και τη μέθοδο get της ArrayList.
Luciddream Δημοσ. 14 Απριλίου 2014 Δημοσ. 14 Απριλίου 2014 εφτιαξα κάτι στα γρήγορα, δεν ξέρω πόσο καλό είναι, ασχολούμαι με Java καμια δυο βδομάδες, οπότε καλοδεχούμενες οι κριτικές Main.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<IEmployee> myList = new ArrayList<>(); SalariedEmployee a = new SalariedEmployee(1,"Giorgos",12345,10000); HourlyEmployee b = new HourlyEmployee(2,"Kostas",12346,50,100); myList.add(a); myList.add(; for (IEmployee c : myList) { System.out.println("Employee ID: " + c.getId()); System.out.println("Employee Name: " + c.getName()); System.out.println("Employee AFM: " + c.getAfm()); System.out.println("Employee Salary: " + c.getPayment()); } } } HourlyEmployee.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; /** * * @author Luciddream */ public class HourlyEmployee implements IEmployee { int hours; int payperhour; int id; String name; int afm; public HourlyEmployee(int id,String name,int afm,int payperhour,int hours) { this.id = id; this.afm = afm; this.payperhour = payperhour; this.hours = hours; this.name = name; } @Override public double getPayment() { return hours*payperhour; } @Override public int getId() { return id; } @Override public int getAfm() { return afm; } @Override public String getName() { return name; } } IEmployee.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; /** * * @author Luciddream */ public interface IEmployee { public double getPayment(); public int getId(); public int getAfm(); public String getName(); } SalariedEmployee.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; /** * * @author Luciddream */ public class SalariedEmployee implements IEmployee { int id; int afm; double salary; String name; public SalariedEmployee(int id,String name,int afm,double salary) { this.id = id; this.afm = afm; this.salary = salary; this.name = name; } @Override public double getPayment() { return salary; } @Override public int getId() { return id; } @Override public int getAfm() { return afm; } @Override public String getName() { return name; } } Output: Employee ID: 1 Employee Name: Giorgos Employee AFM: 12345 Employee Salary: 10000.0 Employee ID: 2 Employee Name: Kostas Employee AFM: 12346 Employee Salary: 5000.0 1
tr3quart1sta Δημοσ. 14 Απριλίου 2014 Δημοσ. 14 Απριλίου 2014 καπως ετσι public class Main { public static void main(String argv[]) { List myList = new ArrayList(); Scanner in = new Scanner(System.in); myList.add(new SalariedEmployee()); myList.add(new HourlyEmployee()); for(Employee e : myList) { // ypotheto oti ta SalariedEmployee kai HourlyEmployee exoune kapoio koino superclass h interface System.out.println("Enter name"); e.setName(in.nextLine()); System.out.println("Enter AFM"); e.setAFM(in.nextLine()); . . . System.out.println(e.toString()); // sthn class SalariedEmployee ftiaxneis mia methodo toString() pou epistrefei ola auta pou theleis na ektyposeis } }
vagg77 Δημοσ. 15 Απριλίου 2014 Μέλος Δημοσ. 15 Απριλίου 2014 Ευχαριστω για την βοηθεια ρε αλανια. Και γω πρωταρης ειμαι στην Java και μπλοκαρα εκει με την λιστα. Thanks!!
vagg77 Δημοσ. 15 Απριλίου 2014 Μέλος Δημοσ. 15 Απριλίου 2014 @Lucidream Επειδη το προγραμμα σου δουλευει κομπλε, θα ανεβασω την εκφωνηση και κοιτα αν αυτα που εχεις γραψει συναδουν με αυτα που επρεπε να εχω κανει. Αυτο το κανω γιατι ο δικος μου κώδικας παει συμφωνα με την εκφωνηση ενώ σε εσας δεν ειχα ανεβασει ολη την εκφωνηση. Κοιτα την και πες μου αν χρειαζεται να αλλαξω τιποτα. Η κλάση Employee είναι υπερκλάση των κλάσεων SalariedEmployee και HourlyEmployee. Η υπερκλάση έχει τις ιδιότητες name (όνομα), afm (ΑΦΜ) και EmpID (αναγνωριστικό υπαλλήλου). Επιπλέον έχει και μεθόδους για να ανακτούμε όλες τις ιδιότητες και να θέτουμε τιμές στις ιδιότητες name και afm. Η Employee θα πρέπει να δίνει αυτόματα ένα μοναδικό EmpID σε κάθε υπάλληλο που δημιουργείται. Στον πρώτο υπάλληλο θα πρέπει να δίνει το EmpID=1, στον δεύτερο 2 κοκ. Επίσης έχει την αφηρημένη (abstract) μέθοδο payment(). Η υποκλάση SalariedEmployee (τακτικός υπάλληλος) έχει επιπλέον την ιδιότητα salary και μία setSalary μέθοδο για να θέτει μια τιμή σε αυτή την ιδιότητα. Επίσης, η υποκλάση δηλώνει την αφηρημένη μέθοδο payment της υπερκλάσης έτσι ώστε να επιστρέφει τον salary. Η υποκλάση HourlyEmployee (ωρομίσθιος υπάλληλος) έχει επιπλέον τις ιδιότητες hoursWorked (ώρες εργασίας) και hourlyPayment (ωρομίσθιο). Επιπρόσθετα, δηλώνει τις μεθόδους get και set γι' αυτές τις ιδιότητες. Τέλος, δηλώνει τη μέθοδο payment που είναι ο ορισμός της abstract μεθόδου της υπερκλάσης. Η μέθοδος αυτή θα επιστρέφει το γινόμενο των ωρών εργασίας επί του ωρομισθίου. Όλες οι ιδιότητες των κλάσεων θα πρέπει να είναι private ενώ οι μέθοδοι public. Να κατασκευάσετε την πιο πάνω ιεραρχία κλάσεων και στη συνέχεια να κάνετε μία κλάση Main η οποία θα περιέχει τη συνάρτηση main. Η main θα δηλώνει μια λίστα στην οποία θα βάλετε ένα αντικείμενο SalariedEmployee και ένα αντικείμενο HourlyEmployee. Στη συνέχεια να θέσετε τα στοιχεία και το μισθό του πρώτου υπαλλήλου καθώς και τα στοιχεία του δεύτερου υπαλλήλου συμπεριλαμβανομένων των ωρών εργασίας και του ωρομισθίου. Τέλος, η main θα πρέπει να εκτελεί ένα βρόχο for στον οποίο για κάθε υπάλληλο θα εμφανίζει το αναγνωριστικό του, το όνομα του, το ΑΦΜ του και το μισθό του, όπως φαίνεται στο παρακάτω παράδειγμα: Employee ID: 1 Employee Name: Gewrgiou Employee AFM: 777777 Employee Payment: 300000 Employee ID: 2 Employee Name: Karamitros Employee AFM: 888888 Employee Payment: 12000 Oι δηλώσεις πρέπει να είναι ως εξής : Στην Employee πρεπει να δηλώνω τα name,afm ως String και το EmpID ως long.Επισης, πρεπει να έχουν τις εξής μεθόδους void setName(String name), String setName(), void setAfm(String Afm), String getAfm(), long getEmpID() abstract int payment() SalariedEmployee : int salary = 0; voidsetSalary( int salary) int payment() HourlyEmployee int hoursWorked = 0; int hourlyPayment = 0; void sethoursWorked(int hoursWorked) int gethoursWorked() void sethourlyPayment(int hourlyPayment) int gethourlyPayment() int payment() Αν καταφερεις και μου ξαναανεβασεις την ασκηση με τις διορθωσεις,θα σου ειμαι υποχρεος. Δοκιμασα να το κανω και εγω αλλα σε καθε βημα επαιρνα ολο λαθη στις μεθοδους.
gon1332 Δημοσ. 15 Απριλίου 2014 Δημοσ. 15 Απριλίου 2014 Γιατί δε μας γράφεις τί λάθη σου "πετάει"; Πιστεύω θα σε βοηθήσει και σένα καλύτερα αυτή η διαδικασία.
vagg77 Δημοσ. 15 Απριλίου 2014 Μέλος Δημοσ. 15 Απριλίου 2014 Θα σας παραθεσω μεχρι τωρα τις 3 κλάσεις που εχω φτιαξει : abstract class Employee { private String name, Afm; private long EmpID; private static int count=0; public Employee (String name, String Afm, long EmpID) { this.name=name; this.Afm=Afm; this.EmpID=EmpID; } public void setName (String name) { this.name=name; } public String getName () { return name; } public void setAfm (String Afm) { this.Afm=Afm; } public String getAfm () { return Afm; } public long getEmpID() { for(count=1;count<=2;count++) { count++; } return count; } abstract int payment(); } public class SalariedEmployee extends Employee { private int salary = 0; public SalariedEmployee(String name, String Afm, long EmpID, int salary) { super(name,Afm,EmpID); this.salary=salary; } public void setSalary (int salary) { this.salary=salary; } public int payment() { return salary; } } public class HourlyEmployee extends Employee { private int hoursWorked = 0; private int hourlyPayment = 0; public HourlyEmployee (int hoursWorked, int hourlyPayment, String name, String Afm, long EmpID) { super(name, Afm, EmpID); this.hoursWorked=hoursWorked; this.hourlyPayment=hourlyPayment; } public void setHoursWorked(int hoursWorked) { this.hoursWorked=hoursWorked; } public int getHoursWorked () { return hoursWorked; } public void setHourlyPayment(int hourlyPayment) { this.hourlyPayment=hourlyPayment; } public int getHourlyPayment () { return hourlyPayment; } public int payment() { return hourlyPayment * hoursWorked; } } Το μονο που θελω ειναι καποιος να μου δώσει τον κωδικα της main, κατασκευασμενο συμφωνα με τις κλασεις που εχω φτιαξει, γιατι μπερδευομαι με λιστες και πινακες.
Luciddream Δημοσ. 15 Απριλίου 2014 Δημοσ. 15 Απριλίου 2014 Employee.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; import java.util.concurrent.atomic.AtomicLong; /** * * @author Luciddream */ public abstract class Employee { private static final AtomicLong nextid = new AtomicLong(); private String name; private String afm; private final long EmpID; public Employee() { EmpID = nextid.incrementAndGet(); } public String getName() { return name; } public String getAfm() { return afm; } public void setName(String name) { this.name = name; } public void setAfm(String afm) { this.afm = afm; } public long getEmpId() { return EmpID; } public abstract int payment(); } HourlyEmployee.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; /** * * @author Luciddream */ public class HourlyEmployee extends Employee { int hoursWorked = 0; int hourlyPayment = 0; public HourlyEmployee() { } @Override public int payment() { return hoursWorked*hourlyPayment; } public void sethoursWorked(int hoursWorked) { this.hoursWorked = hoursWorked; } public void sethourlyPayment(int hourlyPayment) { this.hourlyPayment = hourlyPayment; } public int gethoursWorked() { return this.hoursWorked; } public int gethourlyPayment() { return this.hourlyPayment; } } SalariedEmployee.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; /** * * @author Luciddream */ public class SalariedEmployee extends Employee { int salary = 0; public SalariedEmployee() { } @Override public int payment() { return salary; } public void setSalary(int salary) { this.salary = salary; } } Main.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package askisi; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Employee> myList = new ArrayList<>(); SalariedEmployee a = new SalariedEmployee(); HourlyEmployee b = new HourlyEmployee(); a.setName("Gewrgiou"); a.setAfm("777777"); a.setSalary(300000); b.setName("Karamitros"); b.setAfm("888888"); b.sethourlyPayment(120); b.sethoursWorked(100); myList.add(a); myList.add(; for (Employee c : myList) { System.out.println("Employee ID: " + c.getEmpId()); System.out.println("Employee Name: " + c.getName()); System.out.println("Employee AFM: " + c.getAfm()); System.out.println("Employee Salary: " + c.payment()); } } } Output: Employee ID: 1 Employee Name: Gewrgiou Employee AFM: 777777 Employee Salary: 300000 Employee ID: 2 Employee Name: Karamitros Employee AFM: 888888 Employee Salary: 12000
vagg77 Δημοσ. 16 Απριλίου 2014 Μέλος Δημοσ. 16 Απριλίου 2014 Ευχαριστουμε παρα παρα παρα πολυ τον Luciddream αλλα εχω μερικες ερωτησεις. Δεν καταλαβα τις εξης εντολές : Κλάση Employee * import java.util.concurrent.atomic.AtomicLong; * private static final AtomicLong nextid = new AtomicLong(); * public Employee() { EmpID = nextid.incrementAndGet(); } Και παλι ευχαριστώ παρα πολυ που ασχοληθηκατε
Luciddream Δημοσ. 16 Απριλίου 2014 Δημοσ. 16 Απριλίου 2014 αυτο το χρησιμοποιείς για το counter. κάθε φορά που δημιουργείται ένα αντικείμενο που εχει υπερκλάση την Employee, το αυξάνει με την μέθοδο incrementAndGet(). δεν ξέρω αν γίνεται πιο απλά, έκανα ενα google και το βρήκα οτι το κάνουν έτσι. Και εγώ τώρα μαθαίνω οπότε το να βοηθάω είναι ευχαρίστηση μου όποτε μπορώ, αφου μαθαίνω και εγώ ταυτόχρονα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα