Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2006, 13:23   #1
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
[java] reference

Ciao,
vorrei implementare un metodo che mi ritorna un boolean, che mi indica se un oggetto non è stato ancora refererenziato, come potrei fare?
grazie
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2006, 14:50   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
non sono sicuro di aver capito...cmq ci provo:
Codice:
public boolean isNull(Object o) {
     return o == null;
}
ma non sono sciuro se è quello ke avevi chiesto..
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2006, 15:29   #3
pisto
 
Messaggi: n/a
un oggetto (o meglio un reference, cioè una cosa che punta all'oggetto in sè) non referenziato è
Object x;

con x in questo stato non ci puoi fare proprio niente, il compilatore di darà sempre e comunque errore.
un reference così
Object x=null;
è un reference che sì punta a qualcosa, a null.
  Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 00:37   #4
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
mi spiego meglio:
Invece di chiedermi se object x==null, mi chiedevo se era possibile implementare un metodo che mi faccia la stessa cosa ma senza usare "==null" .

raniero è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 12:05   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
possiamo sapere a cosa ti serve? per realizzare il codice scritto da TigerShark "== null" va usato per forza, poco ma sicuro...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 12:24   #6
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Codice:
public boolean ciStaDentro(Object o) {
  try {
    o.hashCode();
    return true;
  } catch (NullPointerException ex) {
    return false;
  }
}
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 12:27   #7
pisto
 
Messaggi: n/a
Quote:
Originariamente inviato da Angus
Codice:
public boolean ciStaDentro(Object o) {
  try {
    o.hashCode();
    return true;
  } catch (NullPointerException ex) {
    return false;
  }
}
  Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 12:45   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
La tua richiesta mi ha acceso un dubbioer caso vuoi realizzare un reference count o qualcosa del genere?
Tutto sommato e' piuttosto semplice controllare se il tuo oggetto e' uguale a null, per cui ho l'impressione che la tua richiesta sia qualcosa di diverso. Sbaglio?

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 13:51   #9
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
sono un programmatore alle prime armi,siccome mi e' stato contestato in un progetto il fatto di controllare se un "oggetto è == null" e' proprio quello che voglio,penso il tuo metodo vada bene, probabilmente io voglio il contrario:

Codice:
public boolean isEmpty(Object o) {
  try {
    o.hashCode();
    return false;
  } catch (NullPointerException ex) {
    return true;
  }
}
Grazie per la vostra disponibilità, è un piacere imparare da gente esperta come voi
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 14:14   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Se ti va, potresti pubblicare il pezzo di codice contestato.
Scusa il mio intervento, ma mi sembra strano che ti obiettino di verificare se stai lavorando con dei dati corretti. Generalmente contestano il fatto che questi controlli non ci siano.....

Magari il tuo codice e' particolare. Se vuoi, per scrupolo, possiamo darci un'occhiata....

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 14:39   #11
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
certo, ecco qua il codice contestato, il puto critico e' rappresentato dal
"while (mret==null)"..

Codice:
package com.officina;

import java.util.ArrayList;

public class Officina {
  private ArrayList operai;
  private ParcoMacchine macchineRiparate;  
  private CassettaAttrezzi cassettaAttrezzi;
  private ArrayList macchineDaRiparare;  
  
  public Officina(CassettaAttrezzi cassettaAttrezzi, ParcoMacchine macchineRiparate){
	  this.cassettaAttrezzi = cassettaAttrezzi;
	  this.operai             = new ArrayList();
	  this.macchineDaRiparare = new ArrayList();
	  this.macchineRiparate   = macchineRiparate;
  }
  
  public void avviaLavori(){
    for(int i = 0; i < operai.size(); i++){
      if (operai.get(i) instanceof Operaio) {
        Operaio operaio = (Operaio) operai.get(i);
        operaio.start();
	  }	
    }	  
  }
  
  public CassettaAttrezzi prendiCassettaAttrezzi(){
    return cassettaAttrezzi;
  }
  
  public void aggiungiMeccanico(Operaio operaio){
    operai.add(operaio);  
  }
  
  public synchronized void riponiMacchinaRiparata(Macchina macchina){
    macchineRiparate.aggiungiMacchina(macchina);	  	  
  }
  
  public synchronized void parcheggiaMacchinaDaRiparare(Macchina macchina) throws InterruptedException {
	macchineDaRiparare.add(macchina);
	notifyAll();
  }
  
  public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {
	  Macchina mRet = null;	
	  Object objTmp = null;
	
	  while(mRet == null){               // punto critico!!!!!!!!!!!!!!
	    if (macchineDaRiparare.size() != 0){
        objTmp = macchineDaRiparare.remove(0);
        if (objTmp instanceof Macchina) {
	        mRet = (Macchina) objTmp;
	      }  
	    } else wait();  	    
	  }  	
    return mRet;
  }
}

grazie 1000 sottovento.. mi piacerebbe imparare molto da gente come te..
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 14:53   #12
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao,
grazie per gli immeritati complimenti, ma non credo di poter insegnare niente.

Ho controllato il codice che hai postato, e mi sembra in ordine (purtroppo nella pubblicazione si e' persa l'indentazione originale, immagino. Comunque e' comprensibile).

Da quello che ho capito, questa funzione ritorna la prima macchina disponibile alla riparazione. Nel caso non ci siano, si addormenta ed aspetta che ne arrivino. Come effetto collaterale, svuota la pila che contiene la lista delle macchine da riparare e, forse, altre cose...

Beh, se e' questo quanto ti era richiesto di fare, direi che allora ci siamo. Se non era questo, puo' darsi che io abbia capito male o analizzato male il codice.
Ad ogni modo non vedo grossi problemi.

La curiosita' aumenta: ti hanno contestato il fatto che usi un confronto a null? per quale motivo?

Piccola domanda: spesso nelle aziende che usano Java, hanno del personale che proviene dal C e ogni tanto "mischiano" i linguaggi, visto che sono tanto simili. E' il caso di chi ha mosso la contestazione?

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 15:05   #13
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Quote:
Originariamente inviato da raniero
certo, ecco qua il codice contestato, il puto critico e' rappresentato dal
"while (mret==null)"..

Codice:
package com.officina;

import java.util.ArrayList;


...

  
  public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {
	  Macchina mRet = null;	
	  Object objTmp = null;
	
	  while(mRet == null){               // punto critico!!!!!!!!!!!!!!
	    if (macchineDaRiparare.size() != 0){
        objTmp = macchineDaRiparare.remove(0);
        if (objTmp instanceof Macchina) {
	        mRet = (Macchina) objTmp;
	      }  
	    } else wait();  	    
	  }  	
    return mRet;
  }
}
Mi astengo dallo stravolgere il codice. Però potresti pensare se questo fa al caso tuo:

Codice:
public synchronized Macchina prendiMacchinaDaRiparare() {  
	
	  while(macchineDaRiparare.size() == 0) { // punto critico!!!!!!!!!!!!!! }

	  return (Macchina) macchineDaRiparare.remove(0);

}
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }

Ultima modifica di Angus : 06-03-2006 alle 15:09.
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 15:21   #14
crick_pitomba
Member
 
Iscritto dal: Oct 1999
Messaggi: 111
Quote:
Originariamente inviato da raniero
public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {
Macchina mRet = null;
Object objTmp = null;

while(mRet == null){ // punto critico!!!!!!!!!!!!!!
if (macchineDaRiparare.size() != 0){
objTmp = macchineDaRiparare.remove(0);
if (objTmp instanceof Macchina) {
mRet = (Macchina) objTmp;
}
} else wait();
}
return mRet;
}
}
[/code]
Scusa, ma non capisco una cosa: a me quel while sembra completamente inutile
il ciclo non viene comunque eseguito una sola volta?
crick_pitomba è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 15:27   #15
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
esatto, finche non ci sono macchine da riparare continua a cercare nella lista macchine, quando la trova ritorna la macchina da riparare.. il motivo della contestazione non lo so, ho solo il punto di codice segnato in rosso dal mio prof!(sono uno studente).. dici che posso utilizzare la funzione che mi hai suggerito ( al contrario) per modificare il codice e fare sparire il null?

raniero è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 15:45   #16
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
ah ecco forse ci sono, devo utilizzare un "while (true)" e mi risolvo tutti i problemi...

Codice:
public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {

	
	  while(true){
	    if (macchineDaRiparare.size() != 0){
        return  (Macchina) macchineDaRiparare.remove(0);
	    } 
	    else wait();  	    
	  }  	
  }

Ultima modifica di raniero : 06-03-2006 alle 15:52.
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 16:03   #17
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da raniero
ah ecco forse ci sono, devo utilizzare un "while (true)" e mi risolvo tutti i problemi...

Codice:
public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {

	
	  while(true){
	    if (macchineDaRiparare.size() != 0){
        return  (Macchina) macchineDaRiparare.remove(0);
	    } 
	    else wait();  	    
	  }  	
  }
Questo codice e' sensibilmente diverseo dal precedente, poiche' qui supponi che nell'oggetto macchineDaRiparare ci sia sempre un oggetto di tipo macchina. La supposizione veniva a mancare nella versione precedente.

Ho un nuovo indizio, ora: hai un professore, e non un direttore tecnico, a cui rispondere.
In tal caso, i programmi sono di dimensioni piu' corte ma vengono controllati in maniera piu' approfondita.
E' quindi probabile che quel punto di domanda sia stato messo perche' il codice, anche se e' corretto, contiene delle parti inutili (diciamo evitabili) come, appunto, quel controllo.
Si puo' in effetti riscrivere l'algoritmo (vedo che l'hai gia' fatto) e renderlo piu' snello. Forse era questo che il prof. intendeva.

Piu' semplicemente, invece che un ciclo infinito, potresti scrivere:

while (macchineDaRiparare.size() != 0)
{
// ...
}

(detto fra noi: generalmente io scrivo
while (macchineDaRiparare.size() > 0)
perche' la condizione piu' forte e' sempre la piu' sicura, ed e' una buona abitudine da prendere. Ovviamente stai facendo un esame, quindi devi entrare nella testa di chi ti sta davanti, prima ancora che pensare a queste cose. Magari non gli piace e ti riempie di segni rossi....)

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 16:10   #18
crick_pitomba
Member
 
Iscritto dal: Oct 1999
Messaggi: 111
Ecco...

Prima durante il primo ciclo di while arrivava al return e indipendentemente dal valore presente (null oppure diverso da null) restituiva il valore (ovviamente per questo motivo il ciclo veniva eseguito un'unica volta).

adesso invece aspetta che effettivamente ottieni un oggetto e quindi restituisce un valore valido.

Ma a questo punto potresti tagliare la testa al toro con

Codice:
public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {

	
	  while(macchineDaRiparare.size() == 0)){
                wait();
	    } 
        return  (Macchina) macchineDaRiparare.remove(0);
	  
  }
edit: in questo caso assumo che ci siano più metodi che cercano di prelevare la macchina dalla coda

altrimenti il codice potrebbe essere semplicemente


Codice:
public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {

	
	  if (macchineDaRiparare.size() == 0))
                wait();
        return  (Macchina) macchineDaRiparare.remove(0);
	  
  }

in questo modo se la lista è vuota il codice viene bloccato fino al primo notify().
Quando viene sbloccato siccome il codice è nella clausola syncrhonized dovresti essere sicuro che c'è qualcosa nella lista.

Ultima modifica di crick_pitomba : 06-03-2006 alle 16:15.
crick_pitomba è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 16:15   #19
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Quote:
Originariamente inviato da crick_pitomba
Ecco...

Prima durante il primo ciclo di while arrivava al return e indipendentemente dal valore presente (null oppure diverso da null) restituiva il valore (ovviamente per questo motivo il ciclo veniva eseguito un'unica volta).

adesso invece aspetta che effettivamente ottieni un oggetto e quindi restituisce un valore valido.

Ma a questo punto potresti tagliare la testa al toro con

Codice:
public synchronized Macchina prendiMacchinaDaRiparare() throws InterruptedException {

	
	  while(macchineDaRiparare.size() == 0)){
                wait();
	    } 
        return  (Macchina) macchineDaRiparare.remove(0);
	  
  }
A questo punto non posso fare a meno di chiedere lo scopo di quel wait()...

edit: alla prima lettura mi era sfuggito il notifyAll().
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }

Ultima modifica di Angus : 06-03-2006 alle 16:21.
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 16:15   #20
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
grazie 1000 per le dritte.. quindi suppongo che te sei un programmatore professionista, e che hai un direttore tecnico pignolo!

raniero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
TP-Link protagonista a IFA 2025 con tant...
TK02 S è la nuova e-enduro di THOK con m...
Fallout 76: Rinnovamento C.A.M.P., pi&ug...
Toyota produrrà auto elettriche in Europ...
HONOR Magic V5 parte bene: lancio da rec...
Dyson svela 11 nuovi prodotti all'IFA: d...
Zurigo si scalda con i rifiuti: le pompe...
Noctua pubblica la nuova roadmap: primo ...
Palo Alto Networks presenta novità...
Surya, il modello di IA di IBM e NASA ch...
I browser Arc e Dia diventano parte dell...
Duster e Bigster, tutto quello che manca...
Superman: Man of Tomorrow, confermato da...
SK Hynix, accordo storico: 10% degli uti...
Arriva Veeam Software Appliance: protezi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v