Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Παιδια,εχω ενα θεμα.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 εκτός και αν ζητηθούν.
 
Μπορει κάποιος να με βοηθήσει να βάλω τα αντικείμενα στην Λιστα????
 
 
Ευχαριστώ!!
 
 

 

 


Μηπως πρεπει να αρχικοποιήσω τις τιμές και να μην τις διαβάζω από το χρήστη καταρχήν?

Δημοσ.

το error που σου πετάει είναι γιατι προσπαθεί να βάλει το όνομα μέσα στο myname[2] το οποίο δεν υπάρχει. θα πρέπει το for σου να ειναι for (count=0; count<2; count++) για να δουλέψει.

 

απο εκεί και πέρα είναι λίγο μπακαλίστικο όλο αυτό που έχεις κάνει :P

 

η άσκηση σου ζητάει να φτιάξεις δύο υπαλλήλους μέσα σε δυο διαφορετικά αντικείμενα. αυτα τα αντικείμενα να τα βάλεις μέσα σε μια λίστα, και μετά με ένα for που θα τρέξει μέσα στην λίστα, να διαβάσεις τις μεταβλητές τους (με κάποια μέθοδο που θα εχει το κάθε αντικείμενο)

Δημοσ.

 

Η 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.

Δημοσ.

εφτιαξα κάτι στα γρήγορα, δεν ξέρω πόσο καλό είναι, ασχολούμαι με Java καμια δυο βδομάδες, οπότε καλοδεχούμενες οι κριτικές :P

 

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
  • Like 1
Δημοσ.

καπως ετσι

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
}

}

 

Δημοσ.

Ευχαριστω για την βοηθεια ρε αλανια. Και γω πρωταρης ειμαι στην Java και μπλοκαρα εκει με την λιστα.

Thanks!!

Δημοσ.

@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()
 
 
Αν καταφερεις και μου ξαναανεβασεις την ασκηση με τις διορθωσεις,θα σου ειμαι υποχρεος. Δοκιμασα να το κανω και εγω αλλα σε καθε βημα επαιρνα ολο λαθη στις μεθοδους.
Δημοσ.

Γιατί δε μας γράφεις τί λάθη σου "πετάει"; Πιστεύω θα σε βοηθήσει και σένα καλύτερα αυτή η διαδικασία.

Δημοσ.

Θα σας παραθεσω μεχρι τωρα τις 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, κατασκευασμενο συμφωνα με τις κλασεις που εχω φτιαξει, γιατι μπερδευομαι με λιστες και πινακες.

Δημοσ.

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
Δημοσ.

Ευχαριστουμε παρα παρα παρα πολυ τον Luciddream αλλα εχω μερικες ερωτησεις.

 

Δεν καταλαβα τις εξης εντολές :

 

Κλάση Employee

 

* import java.util.concurrent.atomic.AtomicLong;

 

* private static final AtomicLong nextid = new AtomicLong();

 

* public Employee() 

    {

     EmpID = nextid.incrementAndGet();
     }


Και παλι ευχαριστώ παρα πολυ που ασχοληθηκατε

Δημοσ.

αυτο το χρησιμοποιείς για το counter. κάθε φορά που δημιουργείται ένα αντικείμενο που εχει υπερκλάση την Employee, το αυξάνει με την μέθοδο incrementAndGet(). δεν ξέρω αν γίνεται πιο απλά, έκανα ενα google και το βρήκα οτι το κάνουν έτσι. Και εγώ τώρα μαθαίνω οπότε το να βοηθάω είναι ευχαρίστηση μου όποτε μπορώ, αφου μαθαίνω και εγώ ταυτόχρονα :)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...