Newsgroup: it.comp.java
Titolo: E' possibile che....?

Un'istruzione all'interno di un metodo letteralmente *cancelli* tutte quelle
successive?
E' successo a me in classe, mentre stavo facendo un esercizio ed il Prof.
non ci ha capito niente.
Non ho il codice qui ma più o meno la situazione era la seg. :
public void nomeMetodo(){
    ...........................
    ........................... ---->istruzioni visibili
    ...........................
    System.out.println("Sto fuori"); ---->è vista
    System.out.println(elenco[i]+"
qualcosa_che_non_ricordo"); ---->istruzione cancellatrice
    System.out.println("Sto dentro"); ----->non viene vista
    ...........................
    ........................... ----->istruzioni cancellate
    ...........................
}
tutto ciò che stava dopo il System.out non veniva visto.
Vi assicuro che cancellandola il resto veniva visto. Il tutto compilava
perfettamente.
Sapete cosa può essere, dove potrebbe essere l'errore?
Grazie a tutti.

 |
| Delete WORLD from address    |
+------------------------------+

 Per caso viene generato qualche messaggio d'errore a video?
Non viene generato alcun messaggio a video. Semplicemente le istruzioni
successive non vengono viste.
elenco[i] è una stringa ma nella classe in cui è definito elenco[] viene
definito anche un metodo toString()
per far si che System.out.println riconosca elenco[i] come il contenuto (la
stringa) e non come un puntatore ad essa (le stringhe sono oggetti).

 definito anche un metodo toString()
Se elenco[i] è già una stringa, che bisogno c'è del metodo toString?


 Se elenco[i] è già una stringa, che bisogno c'è del metodo toString?
elenco è un vettore di n elementi elenco[n] ed ogni elemento è una stringa.
Quindi si ha:
|-----------|
|-----------||
| elemento i | puntatore a -->| oggetto stringa| che punta a ------>|
stringa 1|------>valore effettivo
|-----------|                         | oggetto stringa| che punta
a ------>| stringa 2|------>valore effettivo
|-----------|
ogni elemento è un puntatore che punta a due variabili di tipo stringa che a
loro volta sono
due puntatori al contenuto vero e proprio.
Ad.es.:
________________________________________________________________
class AgendaTelefonica{
  private Persona elenco[]; // Creo il puntatore allo stato.
  private int contatore;
  public AgendaTelefonica(int dim){ //Riceve 0 dalla dichiarazione.
    contatore=0;
    elenco= new Persona[dim]; //Creo lo stato fatto di puntatori, per ora
NULL.
    for(int i=0;i<elenco.length;i++){
      elenco[i]=new Persona("",""); //inizializzo lo stato a qualcosa,
quindi ora
                                  //i puntatori non sono più NULL.
                                  //Lo stato, essendo composto da Stringhe è
a sua
                                  // volta composto da puntatori. CHE
PALLE!!!
    }
  }
_________________________________________________________________
In AGENDATELEFONICAMAIN.JAVA
AgendaTelefonica rubrica=new AgendaTelefonica(0);
_________________________________________________________________
In PERSONA.JAVA
class Persona{
  private String nome;
  private String telefono;
  public Persona(String nome, String telefono){
    this.nome=nome;
    this.telefono=telefono;
  }
  public void setNome(String nome){
    this.nome=nome;
  }
  public void setTelefono(String telefono){
    this.telefono=telefono;
  }
  public String getNome(){
    return nome;
  }
  public String getTelefono(){
    return telefono;
  }
  public String toString(){
    String s=nome+" "+telefono;
    return s;
  }
________________________________________________
Il metodo toString mi serve per poter scrivere System.out.println(elenco[i])
che altrimenti mi restiruirebbe il valore di due puntatori.
Sembra che proprio questa istruzione fosse indigesta anche se non avevo
alcun
messaggio di errore, ne problemi di compilazione.
Spero di aver reso l'idea.
Ciao e grazie.
P.S. Questo non era il codice in questione.

 wrote in message
news:vfug8.62408$fa5.2...@twister2.libero.it...


 se non è una eccezzione ... forse o c'e' un return o un break o un
continue.
Purtroppo non c'era nulla di tutto ciò. Nel caso lo avrei
detto...Semplicemente e non so perchè quel System.out.println *nascondeva*
le istruzioni che seguivano...
Era una semplice istruzione di stampa, tutto qui.....solo che se non riesco
a capire il perchè se mi accade di nuovo mi potrei perdere alla ricerca di
bug insesistenti.

 ha scritto nel messaggio
news:VKvg8.63121$fa5.2...@twister2.libero.it...


 il costruttu switch in if altrimenti alcune println non erano eseguite!!
Mah...che dire...c'è una logica dietro tutto questo?

Hai provato a fare il debug e vedere cosa succede?
Anche a me sembra il classico errore da eccezione.
Prova se hai un compilatore con la possibilità di fare il debug step/step in
to, è meglio.

 quelle successive?
No. :-)
Quel che puo' capitare (a meno di eccezioni magari intercettate da un
catch(Exception e) {} ;) e' che particolari errori di sintassi facciano si' 
che il compilatore capisca qualcosa, mentre all'occhio del programmatore 
pare che il codice dica chiaramente qualcos'altro. Esempi tipici sono
if (ok) 
    	if (finito) { ... }
else { ..non ok... }
o
int i =0;
for(int i=0;i<100;i++); 
   if (i % 2 == 0) System.out.println(i);
Non mi pare il tuo caso, pero'.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun


Possibile scenario:
- l'array elenco non e' stato correttamente inizializzato
- il codice che richiama il tuo metodo e' scritto in 
  modo analogo a  questo:
  ...
  try
  {
    ...
    nomeMetodo();
    ...
  }
  catch (Throwable e)
  {
     // NOTA BENE: Qui dentro non c'e' alcuna istruzione che gestisce
l'eccezione!
  }
  ...
In questo caso, nomeMetodo() solleva una NullPointerException perche'
la System.out.println() cerca di accedere ad un elemento di un array
che non e' stato creato (e quindi il relativo reference e' null).
Tale eccezione viene ignorata (e non produce alcun output di errore)
a causa del blocco catch, esterno al metodo, che non la gestisce 
correttamente (la ignora, e non e' quasi mai buona cosa farlo!).
Altra possibilita' e' che una eccezione venga sollevata da quella
parte "qualcosa_che_non_ricordo" che hai omesso: gli effetti sarebbero
esattamente gli stessi.
Consiglio: prima di andare alla ricerca di bachi della JVM o
del compilatore, guardare sempre ai bachi che si annidano
nella nostra testa: l'occhio del programmatore spesso NON 
vede il codice che ha effettivamente scritto, ma solo quello 
che pensava di voler scrivere... ;)
Saluti
Roberto
-- 
+-------------------+
| Bagnoli Roberto   |
| Nouvelle srl      |
| MODENA (ITALY)    |
| 
rbag...@orion.it
 |
+-------------------+

successive?
Una stupida, banalissima eccezione?