Bir Java kursunda nesne yönelimli programlama öğreniyorum ve bir programın üç tür nesne oluşturduğu bir proje yapıyorum: Adres, Tarih ve Çalışan. Program birkaç çalışanın verilerini saklar ve daha sonra verileri bir tür Çalışan çalışanında görüntüler.Başka bir sınıfta statik olmayan bir yönteme statik bir başvuru yapmak
Ben dört farklı sınıflar kullanıyorum: Bir Address
sınıf, bir Date
sınıf ve bir Employee
Sınıf ve diziyi oluşturan bir EmployeeTest
sınıfı. İşte
public class Address {
private String Street;
private String City;
private String State;
private int ZipCode;
public Address(String St, String Ci, String Sta, int Zip){
Street = St;
City = Ci;
State = Sta;
ZipCode = Zip;
}
public String getEmployeeAddress(){
return (Street + ", " + City + ", " + State + " " + ZipCode);
}
}
Tarih Sınıfı:
public class Date {
private int Month;
private int Day;
private int Year;
public Date(int M, int D, int Y){
Month = M;
Day = D;
Year = Y;
}
public String getDateString(){
return (Month + "/" + Day + "/" + Year);
}
}
Ve Çalışan Sınıf:
public class Employee {
private int EmployeeNum;
public void setEmployeeNum(int ENum){
EmployeeNum = ENum;
}
public int getNum(){
return EmployeeNum;
}
public String getDate(){
return Date.getDateString();
}
public String getName(){
return Name.getEmployeeName();
}
public String getAddress(){
return Address.getEmployeeAddress();
}
}
bu sınıfların tamamı
aynı paketin içindedir (Eclipse kullanıyorum). Çalışan sınıfının noktası, Çalışan tipi bir nesne oluşturmak ve Adres, İsim ve Tarih sınıflarını kullanarak Adres, Ad ve Kiralama Tarihini alabilmektir.dizi devreye girer yerim burası:
import java.util.Scanner;
import java.lang.*;
public class EmployeeTest {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("How many employees will have their data stored today?");
int EmployeeAmount = Integer.parseInt(input.nextLine());
Employee [] EmployeeArray = new Employee[EmployeeAmount];
for (int i = 0; i < EmployeeArray.length; i ++){
System.out.print("What is employee " + (i+1) + "'s employee number?");
int EmployeeNumber = Integer.parseInt(input.nextLine());
EmployeeArray[i] = new Employee();
EmployeeArray[i].setEmployeeNum(EmployeeNumber);
System.out.println("What is the first name of employee " + EmployeeNumber + "?");
String EmployeeFirstName = input.nextLine();
System.out.println("What is the last name of employee " + EmployeeNumber + "?");
String EmployeeLastName = input.nextLine();
Name EmployeeName = new Name(EmployeeFirstName, EmployeeLastName);
System.out.println("Please enter the street address: ");
String StreetAddress = input.nextLine();
System.out.println("Please enter the name of the city: ");
String CityName = input.nextLine();
System.out.println("Please enter the two character code for the state: ");
String StateID = input.nextLine();
System.out.println("Please enter this address's zip code: ");
int ZipCode = Integer.parseInt(input.nextLine());
Address EmployeeAddress = new Address(StreetAddress, CityName, StateID, ZipCode);
System.out.println("Finally, what was the month(#) of the hire date?");
int Month = Integer.parseInt(input.nextLine());
System.out.println("What was the day(#)?");
int Day = Integer.parseInt(input.nextLine());
System.out.println("What was the year?");
int Year = Integer.parseInt(input.nextLine());
Date HireDate = new Date(Month, Day, Year);
}
for (int j = 0; j < EmployeeArray.length; j ++){
System.out.println("Employee number: " + EmployeeArray[j].getNum());
System.out.println("Employee Name: " + EmployeeArray[j].getName());
System.out.println("Employee Address: " + EmployeeArray[j].getAddress());
System.out.println("Employee Hiredate: " + EmployeeArray[j].getDate());
}
}
}
programı dizide saklanacak çalışan sayısına girmesini ister, sonra da büyüklüğü EmployeeAmount
bir Employee[]
yaratır. Kodun fikri, Dizideki her Çalışan için, diğer sınıflardaki tüm değişkenlerin elde edilmesidir: Çalışan Numarası, Çalışan Adı (ilk ve son), Adres (Sokak Adresi, Şehir, Eyalet Kodu, Posta Kodu), Kiralama Tarihi (Ay, Gün, Yıl). Tüm bunlar elde edildikten sonra, ikinci for
döngü her Çalışanın içinden yinelenir ve bilgileri görüntüler.
ben yaşıyorum sorun Employee
sınıfında Eclipse getDate()
, getName()
ve getAddress()
yöntemlerde bana bir hata verir olmasıdır. Örneğin, return Date.getDateString()
, Eclipse dediğimde, statik olmayan bir yönteme statik bir başvuru yapamadığımı söylüyor. Bu çözüm, getDateString()
'u statik yapmaktır ve bunu denedim, ancak sorun, Adres, Çalışan ve Tarih sınıflarındaki tüm yöntemleri ve değişkenleri yaparak değerlerin kilitli olmasıdır. Tüm çalışanlar için aynı verinin gösterileceği anlamına gelir.
İşte demek istediğim. Aşağıda tüm yöntemleri ve değişkenleri statik yapsaydım, bir örnek çıktı var. Yıldız işaretleri arasındaki metin, kullanıcının girdiği şeydir. gösterildiği gibi değişken ve statik yöntemlerin tümü yaparak
How many employees will have their data stored today?**2** What is employee 1's employee number?**1** What is the first name of employee 1? **Bob** What is the last name of employee 1? **Jones** Please enter the street address: **300 1st Avenue** Please enter the name of the city: **New York** Please enter the two character code for the state: **NY** Please enter this address's zip code: **10001** Finally, what was the month(#) of the hire date? **1** What was the day(#)? **1** What was the year? **2001** What is employee 2's employee number?**2** What is the first name of employee 2? **Bobby** What is the last name of employee 2? **Robinson** Please enter the street address: **301 1st Avenue** Please enter the name of the city: **Los Angeles** Please enter the two character code for the state: **CA** Please enter this address's zip code: **90001** Finally, what was the month(#) of the hire date? **1** What was the day(#)? **2** What was the year? **2004** Employee number: 2 Employee Name: Bobby Robinson Employee Address: 301 1st Avenue, Los Angeles, CA 90001 Employee Hiredate: 1/2/2004 Employee number: 2 Employee Name: Bobby Robinson Employee Address: 301 1st Avenue, Los Angeles, CA 90001 Employee Hiredate: 1/2/2004
değerleri programın gereksiz kılan, kilitlenir. Bu problemin çözümü olan var mı? Diğer sınıflardaki yöntemlere başvururken, her çalışanın bilgilerini görüntülemenin bir yoluna ihtiyacım var. Şimdi, normalde tüm değişkenleri ve yöntemleri Employee
adı verilen tek bir sınıfta oluşturacağım, ancak ödev yönergeleri bireysel dersler yapmam gerektiğini belirtti.
Çalışanın, bir "Date" ve "Address" (ve muhtemelen bir "Name") örneğinin olması gerekir. – MadProgrammer
Bu örnekler, kullanıcı girişleriyle aynı mı olmalıdır? – LightFlicker
Tüm yöntemlerinizi statik veya değişkenlerinizi yapmayın. Statikleri kaldırın, sınıflarınızın bir örneğini oluşturun ve örneklerde yöntemleri çağırın. – pczeus