while loop tidak menambahkan data ke setiap loop objek yang baru dibuat? di Jawa

Hai semuanya sekali lagi terima kasih telah meluangkan waktu untuk melihat masalah saya.

Saya mencoba membuat program yang melacak karyawan dan berbagai departemen tempat mereka bekerja.

Program pertama-tama membaca dari file teks semua data awal untuk menjalankan program. Program kemudian memiliki perulangan while dalam perulangan while. Perulangan pertama akan membaca rincian departemen dan kemudian membuat departemen

di loop while berikutnya (dalam) ia membaca semua karyawan yang terkait dengan departemen ini, kemudian setelah membaca detail karyawan tersebut membuat karyawan tersebut dan menambahkannya ke departemen yang dibuat sebelumnya untuk mengatakan ini adalah departemen tempat saya bekerja.

setelah menambahkan semua karyawan ke departemen, ia kemudian keluar dari loop dalam dan mengirimkan departemen dengan karyawan di dalamnya ke mainDriver untuk disimpan. Hal ini dilakukan untuk departemen yang tersisa lagi menambahkan karyawan terkait dan seterusnya.

Masalahnya adalah: tampaknya setiap departemen baik-baik saja dan menambahkannya ke driver utama, tetapi semua karyawan ditambahkan ke departemen pertama dan departemen lainnya dibiarkan kosong. Ini bukan cara yang seharusnya karena ada beberapa karyawan di setiap departemen.
Mengapa tidak berpindah ke departemen berikutnya saat Departemen baru dibuat??

Bisakah saya mendapatkan bantuan untuk melihat di mana kesalahan saya.

ini adalah kode yang terbaca di data.

 while  (index < numberOfDepartmentsToRead ) 
{
        String depName1    = inFile.nextLine();
        String location1     = inFile.nextLine();
        String numberOfEmps = inFile.nextLine();
        int    numberOfEmps1 = Integer.parseInt(numberOfEmps);
        Department newDepartment = new Department(depName1 , location1);

    while (i < numberOfEmps1 )
    {
        String fName     = inFile.nextLine();
        String lName     = inFile.nextLine();
        String gender    = inFile.nextLine();
        String address   = inFile.nextLine();
        String   payLevel  = inFile.nextLine(); 
        int dPayLevel = Integer.parseInt(payLevel);
        Employee employeesFromList = new Employee(randomIDno, fName, lName, gender, dPayLevel);
        newDepartment.setAddEmp(employeesFromList, randomIDno);
        i++;
    }

    i = 0;
    index++;
    MainDriver.setDepartmentToSystem(newDepartment);        
} 

karyawan tersebut diteruskan ke metode ini di kelas departemen

public static void setAddEmp(Employee theEmp, int idNumber)
{
    employeesInThisDepartment.add(theEmp);
    employeeMap.put(idNumber, theEmp);
}

departemen ditambahkan ke metode penyimpanan kelas mainDriver yaitu ini

public static void setDepartmentToSystem(Department theDepartment)
        {

            allDepartments.add(theDepartment);
        } 

person Binyomin    schedule 26.10.2011    source sumber
comment
Saya berasumsi bahwa i diinisialisasi ke nol sebelum loop pertama?   -  person Carth    schedule 26.10.2011
comment
Saya ulangi pertanyaan saya kemarin--sumber daya apa yang Anda gunakan untuk mempelajari Java? Sepertinya banyak masalah yang bersifat mendasar, masalah tingkat bahasa, dapat diselesaikan dengan cepat dengan ikhtisar dasar-dasar Java.   -  person Dave Newton    schedule 26.10.2011


Jawaban (4)


public static void setAddEmp(Employee theEmp, int idNumber)

Mengapa bersifat statis? Jadikan itu metode instan.

Jadikan variabel instan employeesInThisDepartment alih-alih statis.

person Bhesh Gurung    schedule 26.10.2011
comment
hanya karena jika tidak statis saya mendapatkan kesalahan tidak dapat merujuk dari konteks statis, - person Binyomin; 26.10.2011
comment
bisakah ini menyebabkan masalah? - person Binyomin; 26.10.2011
comment
@Binyomin: statis berarti milik kelas. Tidak semua instance memiliki miliknya sendiri. - person Bhesh Gurung; 26.10.2011
comment
tetapi ketika saya membuatnya statis, itu menyebabkan lebih banyak masalah daripada nilainya. oh baiklah, kurasa aku tidak punya pilihan. ha ha - person Binyomin; 26.10.2011
comment
Saya sekarang menghapus sebagian besar deklarasi statis dalam metode yang statis. dan saya sekarang mendapatkan pengecualian kesalahan di thread utama kesalahan perubahan kelas yang tidak kompatibel yang diharapkan metode statis mainDriver.setEmployee. mengapa ia mengharapkan statis?? - person Binyomin; 26.10.2011
comment
@Binyomin: Kode yang Anda posting sejauh ini sangat terbatas untuk mengetahui apa yang sebenarnya Anda lakukan? Mengapa Anda tidak memposting seluruh kelas yang terlibat di sini. - person Bhesh Gurung; 26.10.2011

Anda mungkin ingin memeriksa penggunaan static. Sulit untuk mengetahuinya tanpa melihat semua kode Anda, tetapi saya ingin tahu apakah setAddEmp seharusnya tidak menjadi metode statis.

person Eamonn O'Brien-Strain    schedule 26.10.2011

employeesInThisDepartment Anda adalah variabel static, sedangkan Anda memerlukan satu variabel per-Department.

Setiap Department harus memiliki instance sendiri, dengan properti employees, yang mana karyawan departemen tersebut akan ditambahkan. Demikian pula, metode untuk menambahkan karyawan ke departemen harus berupa metode instan, bukan metode statis.

person Dave Newton    schedule 26.10.2011
comment
Sekali lagi terima kasih Dave, maaf merepotkan lagi, tetapi Bagaimana cara mengkodekannya secara berbeda dengan yang saya dapatkan sekarang, sehingga setiap departemen memiliki instance sendiri? - person Binyomin; 26.10.2011
comment
@Binyomin Tidak perlu meminta maaf :) Anda sudah membuat instance baru, hanya saja kelas Department belum diberi kode seperti yang diharapkan untuk dipakai. Seperti yang saya dan orang lain katakan, jadikan lebih sedikit hal yang statis. - person Dave Newton; 26.10.2011
comment
tetapi ketika saya membuatnya statis, itu menyebabkan lebih banyak masalah daripada nilainya. oh baiklah, kurasa aku tidak punya pilihan. Sekarang setelah Anda menyebutkannya, masuk akal bahwa kelas statis akan menyebabkan semua kreasinya ditambahkan hanya ke dalamnya. hmmm saya harus membuatnya berfungsi tanpa statis. terima kasih - person Binyomin; 26.10.2011
comment
@Binyomin Tapi model datanya sedemikian rupa sehingga ada banyak departemen. Inilah sebabnya saya mendorong Anda untuk memeriksa beberapa dasar bahasa Java, karena ini adalah hal mendasar dan penting yang akan Anda gunakan setiap hari saat Anda mengembangkannya, baik dalam Java atau bahasa OO berbasis kelas lainnya. - person Dave Newton; 26.10.2011
comment
Ya, setelah saya menjalankan program ini, saya akan duduk dan mempelajari kembali beberapa dasar-dasar Java. - person Binyomin; 26.10.2011
comment
oke satu masalah terakhir. Saya telah menghapus semua masalah statis dari kode saya. Tapi sekarang saya mendapatkan kesalahan metode non-statis setDepartmentToSystem (Department) tidak dapat direferensikan dari konteks statis. baiklah mainDriver saya harus statis, itulah satu-satunya cara untuk mendeklarasikannya, jadi bagaimana saya mereferensikannya dari metode non-statis. - person Binyomin; 26.10.2011
comment
@Binyomin Itu berarti Anda memanggilnya dari metode statis; itu perlu dipanggil dari sebuah instance--ini masih merupakan masalah statis. - person Dave Newton; 26.10.2011
comment
Saya telah mendeklarasikan mainDriver saya seperti ini untuk mendapatkan startup awal dengan public static void main(String[] args) { new MainDriver(); } - person Binyomin; 26.10.2011
comment
haruskah saya mendeklarasikannya seperti yang saya lakukan pada objek MainDriver theMainDriver = new MainDriver(); - person Binyomin; 26.10.2011
comment
@Binyomin Anda tidak boleh melakukan semua pekerjaan MainDriver di konstruktor, melainkan sesuatu seperti MainDriver md = new MainDriver(); md.go(); atau apa pun. Tanpa melihat kode apa pun, saya hanya menebak-nebak. - person Dave Newton; 26.10.2011
comment
aha itu harusnya berada di kelas yang terpisah dari program lainnya? - person Binyomin; 26.10.2011
comment
@Binyomin Belum tentu; metode main dari MainDriver dapat membuat MainDriver dan menggunakannya; itu tipikal. - person Dave Newton; 26.10.2011
comment
Sekali lagi terima kasih Dave. Aku akan membawakannya. Aku akan memberitahumu bagaimana caranya. - person Binyomin; 26.10.2011
comment
jadi jika saya mendeklarasikan MainDriver sebagai theMainDriver dan saya ingin meneruskan variabel ke salah satu metodenya dari kelas yang berbeda. apakah saya akan menggunakan MainDriver.setEmployee (employee). karena saya mencobanya dan tidak berhasil - person Binyomin; 26.10.2011
comment
@Binyomin Mengatakan sesuatu tidak berhasil tidak membantu. Ya, jika Anda mempunyai instance bernama theMainDriver, dan ada metode bernama setEmployee, yang menggunakan parameter jenis apa pun emp, maka metode tersebut akan berfungsi. Jika tidak, salah satu kondisi tersebut tidak terpenuhi, atau terjadi error runtime. Silakan mulai pertanyaan baru karena ini sama sekali tidak ada hubungannya dengan masalah awal, dan ini terlalu banyak komentar. - person Dave Newton; 26.10.2011

Binyomin, menurutku bagian dalammu saat pengontrol salah...

while (i < numberOfEmps1 ){ i++; }

Saya pikir loop ini akan melintasi semua karyawan di file. Kemudian iterasi berikutnya dari loop dalam akan mengembalikan EOF...

Coba posting struktur file Anda..

person jayellos    schedule 26.10.2011
comment
Loop luar membaca jumlah karyawan dan menggunakannya untuk mengontrol loop dalam; itu harus berhenti setelah jumlah karyawan yang benar dibaca (dengan asumsi tidak ada masalah data). - person Dave Newton; 26.10.2011