Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-03-2006, 14: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, 15: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, 16: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, 01: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, 13: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, 13: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, 13: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, 13: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, 14: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, 15: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, 15: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, 15: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, 16: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 16:09.
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 16: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, 16: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, 16: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 16:52.
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 17: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, 17: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 17:15.
crick_pitomba è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 17: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 17:21.
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2006, 17: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


Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
Axiom Space ha completato un importante ...
Gli aeroplani Airbus utilizzeranno i sat...
Una nuova immagine della cometa interste...
'La soluzione a un problema che non esis...
Radeon RX 9000 sì, Ryzen 9000 no:...
Amazon versa 180 milioni al Fisco e canc...
Meta, il Board di Supervisione guarda o...
DJI rivoluziona le consegne aeree: il nu...
Fibercop e Microsoft Italia uniscono per...
App Store Award 2025: scarica le 17 app ...
NVIDIA fa marcia indietro, il supporto P...
Addio definitivo alla GeForce GTX 1080: ...
Numeri record per gli iPhone 17: Apple s...
L'Italia del 2025 raccontata da Google: ...
Piaggio lancia Porter NPE, il pick-up el...
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: 23:53.


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