Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    Per inizializzazione cosa intendi? Credo di averla inizializzata ponendo tutti i letti e le stanze come liberi.

    Il testo dichiara: Il metodo ritorna true se il letto viene occupato, false altrimenti.
    Almeno questo l'ho fatto bene

    Avevo scritto questo codice
    codice:
    public ottimizzaOstello() {		for (int stanza=0; stanza<10; stanza++) {
    			for (int letto=0; letto<5; letto++) {
    				if lettoLibero[stanza][letto] = false; { //letto libero
    					stanza++;
    					for (int stanza=0; stanza<10; stanza++) {
    						for (int letto=0; letto<5; letto++) {
    							if lettoLibero[stanza][letto] = true; { //letto occupato 
    								lettoLibero[stanza][letto] = false;
    							}
    						}
    					}
    				lettoLibero[stanza][letto] = true;
    Ma ho abbandonato perché non mi sembrava che mi portasse da qualche parte..

    Adesso provo con i tuoi consigli e vediamo un po cosa ne esce.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ehm stai facendo una confusione pazzesca!!


    Quote Originariamente inviata da scretch Visualizza il messaggio
    Per inizializzazione cosa intendi? Credo di averla inizializzata ponendo tutti i letti e le stanze come liberi.
    Per inizializzazione intendo che tu non puoi andare ad assegnare un valore ai campi della matrice lettoLibero prima di averla fisicamente istanziata nel costruttore.
    Questo è il costruttore che hai postato:

    codice:
     public Ostello() {
            //all inizio tutti i letti sono liberi
            for (int stanza=0; stanza<10; stanza++) {
                for (int letto=0; letto<5; letto++) {
                    lettoLibero[stanza][letto] = false; 
                }
            }
        }
    Questo codice causerà sicuramente un errore in esecuzione (NullPointerException) perché appunto non hai ancora istanziato lettoLibero con l'operatore new prima di assegnare i valori alle celle.Quindi prima del ciclo devi scrivere nel costruttore:

    codice:
    lettoLibero=new boolean[10][5];
    Quote Originariamente inviata da scretch Visualizza il messaggio
    Il testo dichiara: Il metodo ritorna true se il letto viene occupato, false altrimenti.
    Almeno questo l'ho fatto bene
    Io mi riferisco al costruttore non al metodo checkin() !
    Nel metodo checkin(int stanza,int letto) quando un letto viene occupato si fa diventare false la corrispondente cella nella matrice, che prima deve quindi essere true (e infatti nel metodo prima si controlla che lettoLibero[stanza][letto] sia true).
    Tu invece al momento della costruzione dell'Ostello metti tutti false nella matrice lettoLibero, quindi non sarà possibile occupare nessun letto!

    Quote Originariamente inviata da scretch Visualizza il messaggio
    codice:
    public ottimizzaOstello() {
    for (int stanza=0; stanza<10; stanza++) {
                for (int letto=0; letto<5; letto++) {
                    if lettoLibero[stanza][letto] = false; { //letto libero
                        stanza++;
                        for (int stanza=0; stanza<10; stanza++) {
                            for (int letto=0; letto<5; letto++) {
                                if lettoLibero[stanza][letto] = true; { //letto occupato 
                                    lettoLibero[stanza][letto] = false;
                                }
                            }
                        }
                    lettoLibero[stanza][letto] = true;
    Qui dentro fai un sacco errori, sia di logica sia di sintassi!

    Intanto l'istruzione if va scritta con le parentesi, cioè if (condizione){// istruzioni}, poi nel testare il valore di una variabile dentro all'if non puoi usare l'operatore = (assegnazione) ma devi utilizzare l'operatore == , dopo quando controlli il valore di un booleano è sufficiente scrivere if(variabile) al posto di if(variabile==true), che è un'inutile ripetizione, e infine tu devi controllare che lettoLibero sia uguale a false se vuoi vedere se è occupato...

    Poi nel ciclo non ha alcun senso utilizzare gli stessi indici nei due cicli annidati, ma davvero c'è una quantità industriale di errori lì dentro!
    Prova intanto a ricontrollare tutta la parte relativa alla sintassi (quantomeno il programma deve compilare), poi penserai a come risolvere quel problema, ma per ora siamo messi malino...
    Ultima modifica di Ansharja; 11-12-2015 a 19:11

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.