अमेज़न साक्षात्कार प्रश्न: एक OO पार्किंग स्थल डिज़ाइन करें [बंद]


114

एक OO पार्किंग स्थल डिजाइन करें। इसके क्या वर्ग और कार्य होंगे। यह कहना चाहिए, पूर्ण, खाली और भी वैलेट पार्किंग के लिए जगह खोजने में सक्षम होना चाहिए। पार्किंग में 3 अलग-अलग प्रकार की पार्किंग हैं: नियमित, विकलांग और कॉम्पैक्ट।

धन्यवाद!


39
क्या आपने छलांग लगाई और "यह पुस्तकों के साथ क्या करना है?" और बाहर तूफान?
जेपी अलीोटो

मैंने पूछा कि एक आदमी जो दूसरी स्थिति में गया था। जब मैंने लगभग चार पैटर्न की एक पाठ्यपुस्तक गैंग का इस्तेमाल किया, तो उन्होंने कहा "कम से कम आप बहुरूपता को जानते हैं।" फिर मुझे आने के लिए धन्यवाद दिया गया, और कहा कि वे मुझे बताएंगे। मैं प्रभावित नहीं था।
डेविड थॉर्नले

क्या यह स्मृति प्रबंधन समस्या नहीं है?
संजीव कुमार दांगी

1
यह सवाल पूछे जाने पर, क्या आपको वास्तव में CollabEdit पर कक्षाओं और कार्यों को लिखना है या क्या आपको सिर्फ उनके बारे में बात करनी है?
committedandroider

इस पर एक नज़र डालो। github.com/shanshaji/parking-lot , आशा है कि यह मदद करता है
Shan

जवाबों:


159

यहाँ गियर चालू करने के लिए एक त्वरित शुरुआत है ...

पार्किंगलॉट एक वर्ग है।

पार्किंगस्पेस एक वर्ग है।

पार्किंगस्पेस में एक प्रवेश है।

प्रवेश स्थान से एक स्थान या अधिक विशेष रूप से, प्रवेश से दूरी है।

ParkingLotSign एक वर्ग है।

पार्किंगलॉट में एक पार्किंगलॉटसाइन है।

पार्किंगलॉट में पार्किंग की एक सीमित संख्या है।

हैंडीकैप्डपार्किंगस्पेस पार्किंगस्पेस का एक उपवर्ग है।

RegularParkingSpace पार्किंगस्पेस का एक उपवर्ग है।

कॉम्पैक्टपार्किंगस्पेस पार्किंगस्पेस का एक उपवर्ग है।

पार्किंगलॉट पार्किंग की जगह, और अपने प्रवेश द्वार से दूरी के लिए रिक्त पार्किंग की एक अलग सरणी रखता है।

ParkingLotSign को "पूर्ण", या "खाली", या "रिक्त / सामान्य / आंशिक रूप से कब्जे में" प्रदर्शित करके बताया जा सकता है। .Full (), .Empty () या .Normal ()

पार्कर एक वर्ग है।

पार्कर पार्क कर सकते हैं ()।

पार्कर अनपार्क () कर सकते हैं।

वैलेट पार्कर का एक उपवर्ग है जिसे पार्किंगलॉट कह सकते हैं। FindVacantSpaceNearestEntrance (), जो एक पार्किंगस्पेस लौटाता है।

पार्कर में एक पार्किंगस्पेस है।

पार्कर पार्किंगस्पेस को बुला सकते हैं। टेक () और पार्किंग स्पेस।वीकेट ()।

पार्कर प्रवेश कहता है। प्रवेश () और प्रवेश। प्रवेश () और पार्किंग स्थल पार्किंग स्थल को सूचित करता है जब इसे लिया जाता है या खाली किया जाता है ताकि पार्किंगलोट यह निर्धारित कर सके कि यह भरा हुआ है या नहीं। यदि यह नया पूर्ण या नव खाली है या नव पूर्ण या खाली नहीं है, तो इसे पार्किंग लोटसाइन.फूल () या पार्किंग लोटसाइन.इम खाली () या पार्किंग लोटसाइन.नॉर्मल () को बदलना चाहिए।

हैंडीकैप्डपार्क पार्कर का एक उपवर्ग हो सकता है और कॉम्पैक्टपार्क पार्कर का उपवर्ग और पार्कर का उपवर्ग हो सकता है। (वास्तव में overkill हो सकता है।)

इस समाधान में, यह संभव है कि पार्कर का नाम बदलकर कार कर दिया जाए।


32
कृपया कार मत भूलना।
ojblass

5
पार्किंगस्पेस को एक वर्ग क्यों होना चाहिए? मुझे इसके लिए एक ऑब्जेक्ट बनाने की कोई आवश्यकता नहीं दिख रही है? हर समय, किसी भी पार्किंग स्थान को एक विकलांग, नियमित या कॉम्पैक्ट होना चाहिए। पार्किंगस्पेस एक इंटरफेस होना चाहिए।
name_masked

11
संभवतः हम पार्किंग में फर्श जोड़ सकते हैं ..
बैरी

13
पार्किंगलॉटसाइन क्लास क्यों मौजूद है? एक विशेषता नहीं होगी (कहते हैं, बूल फ़ुल है?) काम?
चिन्मय नेरुकर

3
पार्किंग स्थल को क्यों बनाया जाए? क्यों न सिर्फ एक इस्टैंडिकैप फील्ड और पार्किंग स्थल के लिए एक इम्पैक्ट फील्ड है?
committedandroider

67
public class ParkingLot 
{
    Vector<ParkingSpace> vacantParkingSpaces = null;
    Vector<ParkingSpace> fullParkingSpaces = null;

    int parkingSpaceCount = 0;

    boolean isFull;
    boolean isEmpty;

    ParkingSpace findNearestVacant(ParkingType type)
    {
        Iterator<ParkingSpace> itr = vacantParkingSpaces.iterator();

        while(itr.hasNext())
        {
            ParkingSpace parkingSpace = itr.next();

            if(parkingSpace.parkingType == type)
            {
                return parkingSpace;
            }
        }
        return null;
    }

    void parkVehicle(ParkingType type, Vehicle vehicle)
    {
        if(!isFull())
        {
            ParkingSpace parkingSpace = findNearestVacant(type);

            if(parkingSpace != null)
            {
                parkingSpace.vehicle = vehicle;
                parkingSpace.isVacant = false;

                vacantParkingSpaces.remove(parkingSpace);
                fullParkingSpaces.add(parkingSpace);

                if(fullParkingSpaces.size() == parkingSpaceCount)
                    isFull = true;

                isEmpty = false;
            }
        }
    }

    void releaseVehicle(Vehicle vehicle)
    {
        if(!isEmpty())
        {
            Iterator<ParkingSpace> itr = fullParkingSpaces.iterator();

            while(itr.hasNext())
            {
                ParkingSpace parkingSpace = itr.next();

                if(parkingSpace.vehicle.equals(vehicle))
                {
                    fullParkingSpaces.remove(parkingSpace);
                    vacantParkingSpaces.add(parkingSpace);

                    parkingSpace.isVacant = true;
                    parkingSpace.vehicle = null;

                    if(vacantParkingSpaces.size() == parkingSpaceCount)
                        isEmpty = true;

                    isFull = false;
                }
            }
        }
    }

    boolean isFull()
    {
        return isFull;
    }

    boolean isEmpty()
    {
        return isEmpty;
    }
}

public class ParkingSpace 
{
    boolean isVacant;
    Vehicle vehicle;
    ParkingType parkingType;
    int distance;
}

public class Vehicle 
{
    int num;
}

public enum ParkingType
{
    REGULAR,
    HANDICAPPED,
    COMPACT,
    MAX_PARKING_TYPE,
}

6
दक्षता के लिए कुंजी के रूप में वाहन संख्या के साथ सूचियों के बजाय HashMap का उपयोग करें
sanath_p

5
आपके द्वारा रिलीज़ किए जाने के बाद, vacantParkingSpacesअब और सॉर्ट नहीं किया जाता है। आपको इसे क्रमबद्ध करना होगा ताकि findNearestVacantनिकटतम पार्किंग स्थान वापस आए।
laike9m

1
फ़ंक्शन का नाम क्यों दिया गया है findNearestVacant, जब इसका कार्यान्वयन केवल एक रिक्त स्थान पाता है, जरूरी नहीं कि "निकटतम" एक हो? क्यों नहीं "findVacant"? हालाँकि कक्षा में संग्रहीत कुछ राज्यों का उपयोग करके, "निकटतम" स्थान को वापस करना अच्छा होता। हो सकता है, हम "अंतरिक्ष" वर्ग में "प्रवेश" और "निकास" से दूरियों को संग्रहीत कर सकें, ताकि "निकटतम" की गणना भी की जा सके या हम बस अंतरिक्ष के निर्देशांक, ताकि सभी प्रवेश द्वारों से दूरी बना सकें और बाहर निकलने की जरूरत पर गणना की जा सकती है।
नवाज

1
इसके अलावा, फ़ंक्शन parkVehicleको यह इंगित करना चाहिए कि वाहन पार्क किया गया था या नहीं , एक बूलियन मान लौटाया जाना चाहिए।
नवाज

कोई अशक्त जाँच नहीं। NPE
hitesh

10

अलगाव में मॉडल मौजूद नहीं हैं। संरचनाएं जिन्हें आप कार पार्क में प्रवेश करने वाली कारों के सिमुलेशन के लिए परिभाषित करेंगे, एक एम्बेडेड सिस्टम जो आपको एक खाली स्थान, एक कार पार्किंग बिलिंग सिस्टम या कार पार्क में सामान्य रूप से स्वचालित गेट / टिकट मशीनों के लिए मार्गदर्शन करता है, सभी अलग हैं।


6

ऑब्जेक्ट ओरिएंटेड पार्किंग लॉट में, अटेंडेंट की कोई आवश्यकता नहीं होगी क्योंकि कार "पार्क करने के तरीके जानेंगे"।

बहुत पर एक प्रयोग करने योग्य कार खोजना मुश्किल होगा; सबसे सामान्य मॉडल में या तो उनके सभी चलते हुए हिस्से सार्वजनिक सदस्य चर के रूप में सामने आएंगे, या वे बिना खिड़की या दरवाजों वाली "पूरी तरह से अतिक्रमित" कारें होंगी।

हमारे OO पार्किंग स्थल में पार्किंग स्थान कारों के आकार और आकार से मेल नहीं खाएगा (रिक्त स्थान और कारों के बीच एक "प्रतिबाधा बेमेल")

हमारे लॉट पर लाइसेंस टैग प्रत्येक अक्षर और अंक के बीच एक डॉट होगा। विकलांग पार्किंग केवल "_" से शुरू होने वाले लाइसेंस के लिए उपलब्ध होगी, और "m_" से शुरू होने वाले लाइसेंस को रस्सा दिया जाएगा।


5

आपको एक पार्किंग स्थल की आवश्यकता होगी, जो एक प्रकार के "स्पेस" का एक बहु-आयामी सरणी (निर्माण में निर्दिष्ट) रखता है। पार्किंग स्थल ट्रैक के माध्यम से यह बता सकता है कि रिक्त स्थान को भरने और खाली करने के लिए कॉल के माध्यम से कितने स्थान लिए गए हैं। स्पेस एक एन्यूमरेटेड प्रकार पकड़ सकता है जो बताता है कि यह किस प्रकार का स्थान है। अंतरिक्ष में भी एक विधि है ()। वैलेट पार्किंग के लिए, बस पहले स्थान को खोलें और कार को वहां रखें। आपको अंतरिक्ष में डालने के लिए एक कार ऑब्जेक्ट की भी आवश्यकता होगी, जो धारण करता है कि क्या यह एक विकलांग, कॉम्पैक्ट या नियमित वाहन है।


class ParkingLot
{
    Space[][] spaces;

    ParkingLot(wide, long); // constructor

    FindOpenSpace(TypeOfCar); // find first open space where type matches
}

enum TypeOfSpace = {compact, handicapped, regular };
enum TypeOfCar = {compact, handicapped, regular };

class Space
{
    TypeOfSpace type;
    bool empty;
    // gets and sets here
    // make sure car type
}

class car
{
    TypeOfCar type;
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.