Setelah memutuskan untuk mencoba tangan saya di pasar luar negeri, saya mulai mengirim resume ke berbagai kantor. Bahkan dengan tujuan menemukan pekerjaan, tetapi hanya untuk memperluas wawasan seseorang. Pilihan jatuh pada kekosongan Pengembang Java. Saya tidak punya pengalaman industri bekerja dengan bahasa, hanya pengalaman pribadi, sertifikat dari Pusat Sertifikasi Oracle, buku, dll. Jujur, di tempat kerja terakhir selama satu setengah tahun saya tidak menulis apa pun selain "forov" dan "ifas" (tapi ini adalah cerita yang sama sekali berbeda), jadi saya memutuskan mengapa tidak sebenarnya.
Setelah melewatkan riwayat pencarian dan percakapan dengan majikan, saya akan langsung ke intinya. Satu perusahaan K dari kota G menulis bahwa mereka tertarik untuk mewawancarai saya setelah saya menyelesaikan masalah.
Setelah saya memutuskan dan mengirimi mereka solusinya, K menjawab bahwa setelah kode ulasan mereka memutuskan untuk tidak mempertimbangkan aplikasi saya lagi. Itu merupakan pukulan bagi harga diri saya. Tentu saja, saya mengerti bahwa bahasanya baru, dan secara umum, apa pun bisa terjadi, tetapi saya berharap setidaknya untuk umpan balik pada keputusan saya. Ditambah tugasnya sangat sederhana ... Saya harap Anda akan tertarik pada tugas itu.
Di bawah ini adalah teks asli dari tugas tersebut.
LATIHAN RESTORAN

LATIHAN RESTORAN (silakan gunakan sintaksis JAVA 7)
Restoran Anda memiliki seperangkat tabel dengan ukuran berbeda: setiap meja dapat menampung 2, 3, 4, 5 atau 6 orang. Klien tiba sendiri atau berkelompok, hingga 6 orang. Klien dalam grup tertentu harus duduk bersama di satu meja, maka Anda bisa mengarahkan grup hanya ke meja, yang bisa menampung semuanya. Jika tidak ada meja dengan jumlah kursi kosong yang diperlukan, grup harus menunggu dalam antrian.
Setelah duduk, grup tidak dapat mengubah tabel, mis. Anda tidak dapat memindahkan grup dari satu tabel ke tabel lainnya untuk memberi ruang bagi klien baru.
Grup klien harus dilayani dalam urutan kedatangan dengan satu pengecualian: jika ada cukup ruang di meja untuk grup yang lebih kecil yang tiba kemudian, Anda dapat menempatkan mereka di depan grup yang lebih besar dalam antrian. Misalnya, jika ada kelompok enam orang yang menunggu meja enam kursi dan ada kelompok dua orang yang antri atau tiba, Anda dapat mengirimnya langsung ke meja dengan dua kursi kosong.
Grup dapat berbagi tabel, namun jika pada saat yang sama Anda memiliki meja kosong dengan jumlah kursi yang dibutuhkan dan kursi kosong yang cukup di meja yang lebih besar, Anda harus selalu mendudukkan klien Anda di meja kosong dan tidak ada yang duduk sebagian , meskipun meja kosong lebih besar dari ukuran grup.
Tentu saja sistem mengasumsikan bahwa kelompok yang lebih besar mungkin bosan melihat kelompok yang lebih kecil tiba dan mendahului meja mereka, dan kemudian memutuskan untuk pergi, yang berarti mereka meninggalkan antrian tanpa dilayani.
Silakan isi kelas RestManager dengan struktur data yang sesuai dan terapkan konstruktornya dan tiga metode publik. Anda juga didorong untuk memodifikasi kelas lain (untuk membantu kami mengujinya) dan menambahkan metode baru sesuai keinginan Anda.
public class Table { public final int size;
Penguraian tugas
Setelah menganalisis tugas, seperti yang tampak bagi saya dan tampaknya sekarang, well, sama sekali tidak ada yang rumit. Namun, saya langsung ingin menarik perhatian pada dua poin yang sedikit membingungkan saya.
- "Tentu saja sistem mengasumsikan bahwa kelompok yang lebih besar mungkin bosan melihat kelompok yang lebih kecil tiba dan mendahului meja mereka, dan kemudian memutuskan untuk pergi, yang berarti mereka meninggalkan antrian tanpa dilayani."
- Struktur kelas RestManager
Mengenai paragraf pertama, faktanya adalah bahwa sistem distribusi kami bekerja sesuai dengan aturan di atas, sehingga situasi yang dijelaskan dalam ayat 1 tidak dapat dihindari. Satu-satunya hal yang saya tulis dalam surat tanggapan adalah bahwa Anda dapat menambahkan penundaan sebelum mengeluarkan tabel gratis. Katakanlah sekelompok 3 orang datang ke restoran. Saat ini hanya ada satu meja pada tanggal 6. Dengan konvensi, kami harus memberi mereka meja (Anda harus selalu menempatkan klien Anda di meja kosong ... bahkan jika meja kosong lebih besar dari ukuran grup). Tetapi jika Anda melakukan ini tidak segera, tetapi setelah sekitar 5 menit. Selama waktu ini, ada kemungkinan, meskipun kecil, bahwa kursi atau meja dengan dimensi kurang bebas. Tapi tentu saja terlihat sembrono.
Untuk poin kedua, setidaknya IMHO, metode pencarian Tabel publik tidak di kelasnya. Kita bisa mendapatkan tabel dengan pengambil dari klien, yang, menurut ide itu, harus menyimpan tautan ke meja.
Secara umum, saya menyoroti dua poin utama:
- Anda perlu mengurutkan tabel dalam urutan yang benar. Logika menemukan tabel yang diinginkan dapat dengan mudah ditransfer ke pengurutan. Tabel pertama yang dapat menampung sekelompok pelanggan dan akan diperlukan.
- Hanya dua peristiwa yang membuatnya perlu untuk menemukan tabel untuk klien atau klien untuk tabel. Ini adalah kedatangan klien baru dan setelah grup meninggalkan meja sesuai.
Sebenarnya seluruh masalah dikurangi menjadi dua poin yang tercantum di atas. Ngomong-ngomong, tidak ada gunanya menggunakan koleksi. Antrian adalah antrian, dan, dengan ketentuan, salah satu antrian dapat dilayani, tergantung pada tempat bebas dan ukuran grup, dan sebagai hasilnya, kami tidak akan menggunakan metode yang terkait dengan antrian.
Saya meninggalkan tautan ke git dengan solusi:
RestaurantTask