Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [JAVA] piccolo problema in un esercizio

    Ciao a tutti! Sono nuovo in questo forum quindi se dovessi commettere qualche errore chiedo scusa ma tutto ciò è dovuto alla mia inesperienza. Ho riscontrato un problema nello svolgimento di due metodi di un problema che tratta il meccanismo di ereditarietà. Ho provato a risolverli ma purtroppo non ne vengo a capo. Vi lascio scritti il testo dei metodi e vi lascio il link del problema:

    • Immissione di un nuovo veicolo nel garage (ritornare il numero del posto
    assegnato);

    • Estrazione dal garage del veicolo che occupa un determinato posto (ritornare
    l’istanza del veicolo stesso);

    http://www.lia.deis.unibo.it/Courses/Fo ... zione4.pdf

    Io ho creato la classe "madre" VeicoliaAMotore che viene estesa dalle classi: Furgone, Automobile e motocicletta. In seguito ho creato la classe garage, al suo interno ho dichiarato un ArrayList di tipo VeicoliAMotore e li mi sono fermato.

    Grazie mille in anticipo per l'aiuto




  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ciao, come molti utenti ti direbbero dovresti specificare meglio il problema che stai riscontrando, a meno di non voler chiedere il codice già pronto, che non è nello spirito del forum.

    Se hai fatto delle prove nella scrittura dei metodi in questione posta quello che hai fatto per mostrare cosa non funziona, se non hai idea di come iniziare parti dal chiedere qualche chiarimento su temi generali

    Prima di parlare dei due metodi io mi chiederei se ha senso nel tuo caso usare un arraylist di veicoli a motore per il garage.
    Il problema dice chiaramente che un garage ha un massimo di 15 posti, e nel diagramma si mostra che l'unico parametro passato al metodo per inserire un veicolo è il veicolo stesso,senza un intero che indichi la posizione nella quale si vuole inserire il veicolo.

    Considerato questo io userei un semplice array di veicoli.

    Per quanto riguarda i due metodi in realtà sembrano abbastanza elementari:

    il primo metodo deve immettere un nuovo veicolo nel garage: quindi fai un ciclo in cui trovi la prima posizione dell'array che non contiene un veicolo, inserisci il veicolo con una semplice assegnazione e restituisci l'indice.
    Per controllare il primo posto libero puoi seguire più strade: se inizializzi il vettore di veicoli con valori null basta trovare il primo null, se invece un veicolo può essere solo un furgone,motocicletta o automobile potresti inizializzare il vettore con elementi della classe madre (veicolo a motore), e nel ciclo il primo posto libero lo trovi quando un veicolo a motore non è istanza di nessuna delle sottoclassi (guarda come usare instanceof se non l'hai mai usato).

    Il secondo metodo è ancora più semplice:devi solo ritornare l'elemento dell'array all'indice richiesto.
    Se vuoi puoi aggiungere un controllo in ingresso che verifichi se il posto è libero o occupato, in alcuni casi altrimenti potresti ritornare null o un'istanza della classe generale.

    Il problema non è difficile e ripeto, a meno che tu non voglia il codice già pronto, se non specifichi meglio che problemi riscontri (postando il codice di ciò che hai fatto) è difficile fare di più

  3. #3
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Ciao, sinceramente non ho capito qual'è la domanda.
    Ho provato a risolverli ma purtroppo non ne vengo a capo
    In che senso? Cos'è che non ti è chiaro? Non è che possiamo scrivere il codice al posto tuo. Posta quello che hai fatto altrimenti non ti si può aiutare.

    Posso solo dirti che io avrei scelto un array per rappresentare il garage invece che un ArrayList: hai una capienza del garage prefissata e devi poter avere dei posti vuoti sparsi all'interno di tutto il garage. Volendo lo si può fare anche con un ArrayList ma a mio parere sembra una forzatura (ad esempio per cancellare un elemento non puoi usare il metodo delete perchè ricompatta l'array dopo ogni eliminazione); con un array è più semplice e naturale.

    EDIT. @Ansharja non mi ero accorto che avevi risposto già tu :P
    Ultima modifica di Nikopol; 15-08-2015 a 23:25
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  4. #4
    Ragazzi scusate il ritardo ma tra ferragosto e mia nonna non sono riuscito a mettermi sotto! Cosa che ho fatto sta sera ma senza risultati! Ci tengo a precisare che io NON voglio il codice già fatto perchè ho l'esame di recupero di informatica tra 10 gg e voglio arrivare a ragionare e capire le cose! Ora vi posto il codice che ho fatto secondo le vostre dritte:

    private VeicoliAmotore lista[];

    public int Immissione(){
    for (int i = 0; i<lista.length;i++) {
    if (lista[i] == null) {
    lista[i] = ; }

    Non sono riuscito a capire il concetto di "semplice" assegnazione, cioè dopo che ho fatto il controllo cosa devo assegnare? il metodo lo so risolvere ma concettualmente non riesco immaginarlo è quella la mia difficoltà perchè la sintassi la so molto bene. Vi ringrazio per l'aiuto e la pazienza.

  5. #5
    Per il secondo metodo ho riscontrato questi problemi, intanto posto il codice:


    for (int i = 0; i<lista.length; i++){
    if ( lista[i] == num){
    lista[i] = null;

    return ;


    il problema numero 1 è che NetBeans mi da errore (giustamente) nel controllo perche non posso comparare VeicoliAmotore con un intero che gli passo al metodo, secondo io non so cosa far ritornare al metodo magari qualcuno mi può aiutare.


    Grazie anticipatamente parte 2 f1 f1 f1 f1

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    2
    Ciao Franz,
    credo che la risposta che stai cercando sia scritta nel diagramma UML del testo del tuo esercizio,
    la firma del metodo immettiNuovoVeicolo è:
    public int immettiNuovoVeicolo(VeicoloAMotore v)
    quindi nel tuo loop devi assegnare lista[i] = v;
    c'è poi da gestire il ritorno del metodo nel caso che il garage sia pieno,
    io poco elegantemente imposterei prima del ciclo di for:
    i == -1;
    e dopo, fuori dal ciclo farei
    return i;
    gestendo sulla chiamata il -1 come garage pieno.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    2
    analogamente:
    La firma del metodo estraiVeicolo:
    public VeicoloAMotore estraiVeicolo(int posto)
    ti farà accedere direttamente alla posizione del veicolo ....
    return lista[posto];
    io gestirei all'inizio del metodo i valori minori di zero e maggiori di 14 ritornado null
    saluti e in bocca al Lupo per il tuo esame.

  8. #8
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    io poco elegantemente imposterei prima del ciclo di for:
    i == -1;
    Questo test prima del ciclo non ha molto senso.

    @franz_41: il metodo immetti(), come gia detto da rrea, deve prendere come parametro il veicolo da inserire, altrimenti cosa inserisci...
    Semplicemente scorri l'array fino a trovare un elemento nullo (un posto libero nel garage) e inserisci il veicolo in quella posizione, oppure se arrivi alla fine dell'array (non ci sono posti liberi), gestisci la cosa come preferisci: lanci un eccezione o restituisci -1.
    Ppotresti implementare il tutto con un for con doppio return:
    scorri l'array, se trovi un null inserisci il veicolo e restituisci l'indice bloccando così il ciclo; se invece esci dal ciclo sai che non hai trovato nessun posto libero quindi restituisci -1 o un eccezzione.
    Se invece vuoi un solo punto di uscita la logica è quasi la stessa, ti occorre + solo un booleano e scorrere l'array con un while.

    Invece estariVeicolo è banale, sai già la posizione del veicolo, ti basta leggerlo direttamentte dall array, salvarlo in una variabile temporanea, settare a null il posto appena liberato e restituire il valore che hai nel temporaneo.

    Ti do un consiglio spassionato, riprendi in mano il libro e ristudiati le basi del linguaggio; affrontare esercizi che riguardano l'ereditarietà (non importa quanto siano semplici) senza sapere come scrivere un ciclo, usare un array e passare un argomento a un metodo, non è un buon approcio per imparare a programmare.
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  9. #9
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    No, ma scusa, in tre abbiamo cercato di aiutarti sfruttando il nostro tempo libero e tu invece avevi postato la stessa domanda in altri forum e hai risolto il tuo problema altrove (qualcuno ha scritto il codice per te questa mattina)...
    Potevi almeno avvertire che avevi risolto in modo da non farci perdere tempo.
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.