Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-01-2005, 12:56   #1
Nukles
Senior Member
 
L'Avatar di Nukles
 
Iscritto dal: Oct 2001
Città: Roma - Norge
Messaggi: 1354
[JAVA] perchè indice fuori dai limiti?

Non riesco a capire come mai il seguente programma mi dà l'errore di INDEX OUT OF BOUNDS... è tutta la mattina che mi scervello, magari qualcuno più esperto mi sa aiutare... GRAZIE!!

-------------------------------------------------------

/* Applicazione che ricevendo come parametro un array a non nullo di interi
ordinato in modo non decrescente e un valore intero v, crea e restituisce un nuovo array
di interi che contiene il valore v e tutti gli elementi di a, ed è ordinato in modo
non decrescente*/

class Inserimento {
public static int[] inserisci(int[] a, int v) {
// pre: a[i] >= a[i-1]; a != null
int i; //contatore
int k; //posizione in cui inserire il nuovo elemento
int[] b; //array di uscita

/*questa variabile è un controllo di cancellazione, che serve ad informare l'istruzione ripetitiva
sulla posizione di inserimento degli elementi di b*/
boolean canc;

b = new int[a.length + 1];
canc = false; //inizialmente non si è cancellato alcun elemento

k = 0;

/*istruzione di inserimento elementi nel nuovo array*/
for (i=0; a[i] <= v; i++) {
b[i] = a[i];
k++;
}

b[k] = v;

for (i = k; i<a.length; i++)
b[i+1] = a[i];

return b;

}

private static void visualizza(int[] a) {

/* metodo che visualizza il nuovo array */
int i; //indice di scansione di a

for (i=0; i<a.length; i++)
System.out.print(a[i] + " ");
}

public static void main(String args[]) {
int i; //contatore

/*test di Inserimento*/
System.out.println("Test per int[] inserimento(int[] a, int v)");
/*nuovo elemento in prima posizione*/
visualizza( inserisci(new int[] {7, 8, 22}, 1) ); // (1, 7, 8, 22)
/*nuovo elemento in ultima posizione*/
visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
/*nuovo elemento in posizione intermetdia*/
visualizza( inserisci(new int[] {3, 4, 8, 10}, 5) ); // (3, 4, 5, 8, 10)
/*un solo elemento nell'array, numero da inserire maggiore*/
visualizza( inserisci(new int[] {8}, 10) ); // (8, 10)
/*un solo elemento nell'array, numero da inserire minore*/
visualizza( inserisci(new int[] {8}, 3) ); // (3, 8)

}

}
__________________
har jeg kommet fra Norge !!!!
I've been for a walk on a winter's day, I'd be safe and warm if I was in L.A. ...
Quant'è bella giovinezza, che si fugge tuttavia; chi vuol esser lieto, sia: non si iscriva a ingegneria!
Nukles è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2005, 13:18   #2
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Codice:
for (i=0; a[i] <= v; i++) {
   b[i] = a[i];
   k++;
}
Quando accedi ad un array attraverso l'indicizzatore devi sempre assicurarti che l'argomento (i in questo caso) sia minore della lunghezza di quell'array.
In questo caso non l'hai fatto, dato che nel for i cresce potenzialmente all'infinito se non trova nessun elemento di a che sia maggiore di v.

Per cui quando tu invochi
Codice:
 visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
la i supera a.length facendo lanciare l'eccezione.

A prima vista mi sembra che basti sostituire con:
Codice:
for (i=0; a[i] <= v && i < a.length; i++) {
   b[i] = a[i];
   k++;
}
if (i == a.length)
   k++;
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2005, 22:23   #3
Nukles
Senior Member
 
L'Avatar di Nukles
 
Iscritto dal: Oct 2001
Città: Roma - Norge
Messaggi: 1354
Quote:
Originariamente inviato da end.is.forever
Codice:
for (i=0; a[i] <= v; i++) {
   b[i] = a[i];
   k++;
}
Quando accedi ad un array attraverso l'indicizzatore devi sempre assicurarti che l'argomento (i in questo caso) sia minore della lunghezza di quell'array.
In questo caso non l'hai fatto, dato che nel for i cresce potenzialmente all'infinito se non trova nessun elemento di a che sia maggiore di v.

Per cui quando tu invochi
Codice:
 visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
la i supera a.length facendo lanciare l'eccezione.

A prima vista mi sembra che basti sostituire con:
Codice:
for (i=0; a[i] <= v && i < a.length; i++) {
   b[i] = a[i];
   k++;
}
if (i == a.length)
   k++;
non ci avevo pensato... grazie mille end!
__________________
har jeg kommet fra Norge !!!!
I've been for a walk on a winter's day, I'd be safe and warm if I was in L.A. ...
Quant'è bella giovinezza, che si fugge tuttavia; chi vuol esser lieto, sia: non si iscriva a ingegneria!
Nukles è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2005, 10:22   #4
Nukles
Senior Member
 
L'Avatar di Nukles
 
Iscritto dal: Oct 2001
Città: Roma - Norge
Messaggi: 1354
Ho provato questa piccola variante, ma purtroppo ancora indexoutofbounds...

Codice:
/* Applicazione che ricevendo come parametro un array a non nullo di interi
   ordinato in modo non decrescente e un valore intero v, crea e restituisce un nuovo array
   di interi che contiene il valore v e tutti gli elementi di  a, ed è ordinato in modo
   non decrescente*/

class Inserimento {
	public static int[] inserisci(int[] a, int v) {
	    // pre: a[i] >= a[i-1]; a != null
	    int   i;                                  //contatore
	    int   k;                                  //posizione in cui inserire il nuovo elemento
	    int[] b;                                  //array di uscita

	    /*questa variabile è un controllo di cancellazione, che serve ad informare l'istruzione ripetitiva
	    sulla posizione di inserimento degli elementi di b*/
	    boolean canc;

	    b = new int[a.length + 1];
	    canc = false;                    //inizialmente non si è cancellato alcun elemento

	    k = 0;

        /*istruzione di inserimento elementi nel nuovo array*/
	    for (i=0; a[i] <= v && i<a.length; i++) {
			b[i] = a[i];
			if (a[i] <= v)  k = i;
		}

		b[k] = v;

		for (i = k; i<a.length; i++)
		    b[i+1] = a[i];

		return b;

    }

    private static void visualizza(int[] a) {

		/* metodo che visualizza il nuovo array */
		int i;      //indice di scansione di a

		for (i=0; i<a.length; i++)
		    System.out.print(a[i] + " ");
    }

    public static void main(String args[]) {
		  int i;                            //contatore

		  /*test di Inserimento*/
		  System.out.println("Test per int[] inserimento(int[] a, int v)");
		  /*nuovo elemento in prima posizione*/
		  visualizza( inserisci(new int[] {7, 8, 22}, 1) ); // (1, 7, 8, 22)
		  /*nuovo elemento in ultima posizione*/
		  visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
		  /*nuovo elemento in posizione intermetdia*/
		  visualizza( inserisci(new int[] {3, 4, 8, 10}, 5) ); // (3, 4, 5, 8, 10)
		  /*un solo elemento nell'array, numero da inserire maggiore*/
		  visualizza( inserisci(new int[] {8}, 10) ); //  (8, 10)
		  /*un solo elemento nell'array, numero da inserire minore*/
		  visualizza( inserisci(new int[] {8}, 3) ); // (3, 8)

	}

}
eppure come logica mi sembra corretta...
__________________
har jeg kommet fra Norge !!!!
I've been for a walk on a winter's day, I'd be safe and warm if I was in L.A. ...
Quant'è bella giovinezza, che si fugge tuttavia; chi vuol esser lieto, sia: non si iscriva a ingegneria!
Nukles è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2005, 13:25   #5
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Scusa mi sono sbagliato a scrivere sostituisci con:
Codice:
for (i=0; i < a.length && a[i] <= v; i++) {
   b[i] = a[i];
   k++;
}
if (i == a.length)
   k++;
Cioe nella condizione nell'and prima i < a.length e poi a[i] <= v.
Probabilmente il motivo per cui ti lancia ancora quell'eccezione è che quella modifica non cambiava nulla, dato che ancora per fare il check della condizione doveva accedere all'elemento i di a.
Questo se i è maggiore della lunghezza scatena un' eccezione.

In teoria il check i < a.length dovrebbe avvenire sempre prima di accedere ad a[i]; un po come se facessi
Codice:
if (i < a.length)
   if (a[i] <= v)
in questo modo non ci può essere mai una eccezione.

Per fortuna questa cosa la puoi fare anche usando semplicemente l'operatore and, dato che Java come quasi tutti i linguaggi imperativi "ottimizza" l'operatore and; infatti and restituisce true solo se entrambi gli operandi sono true; questo vuol dire che se già il primo restituisce false, allora qualunque sia il valore del secondo il risultato sara comunque false.
Per questo motivo se il primo degli operandi è false il secondo non viene neanche controllato.

Tu puoi sfruttare questa cosa considerando che quando viene controllato il secondo operando dell'and, hai la garanzia che il primo è già risultato true (in questo caso hai la garanzia che i rispetta la lunghezza dell'array).

La stessa cosa vale per l'or, per cui se il primo è true, il secondo non viene controllato.
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2005, 10:07   #6
Nukles
Senior Member
 
L'Avatar di Nukles
 
Iscritto dal: Oct 2001
Città: Roma - Norge
Messaggi: 1354
grazie al tuo prezioso aiuto, finalmente ci sono riuscito: ecco il programma definitivo

Codice:
/* Applicazione che ricevendo come parametro un array a non nullo di interi
   ordinato in modo non decrescente e un valore intero v, crea e restituisce un nuovo array
   di interi che contiene il valore v e tutti gli elementi di  a, ed è ordinato in modo
   non decrescente*/

class Inserimento2 {
	public static int[] inserisci(int[] a, int v) {
	    // pre: a[i] >= a[i-1] && a != null
	    int   i;                                  //contatore
	    int   k;                                  //posizione in cui inserire il nuovo elemento
	    int[] b;                                  //array di uscita

	    b = new int[a.length + 1];

	    k = 0;

        /*istruzione di inserimento elementi nel nuovo array*/
	    for (i=0; i < a.length && a[i] <= v; i++) {
		   b[i] = a[i];
		   k++;
		}

		b[k] = v;

		for (i = k; i<a.length; i++)
		    b[i+1] = a[i];

		return b;

    }

    private static void visualizza(int[] a) {

		/* metodo che visualizza il nuovo array */
		int i;      //indice di scansione di a

		for (i=0; i<a.length; i++)
		    System.out.print(a[i] + " ");

		System.out.println();
    }

    public static void main(String args[]) {
		  int i;                            //contatore

		  /*test di Inserimento*/
		  System.out.println("Test per int[] inserimento(int[] a, int v)");
		  /*nuovo elemento in prima posizione*/
		  visualizza( inserisci(new int[] {7, 8, 22}, 1) ); // (1, 7, 8, 22)
		  /*nuovo elemento in ultima posizione*/
		  visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
		  /*nuovo elemento in posizione intermetdia*/
		  visualizza( inserisci(new int[] {3, 4, 8, 10}, 5) ); // (3, 4, 5, 8, 10)
		  /*un solo elemento nell'array, numero da inserire maggiore*/
		  visualizza( inserisci(new int[] {8}, 10) ); //  (8, 10)
		  /*un solo elemento nell'array, numero da inserire minore*/
		  visualizza( inserisci(new int[] {8}, 3) ); // (3, 8)

	}

}
Ho tolto l'istruzione che mi avevi messo te

Codice:
if (i == a.length) k++
perchè non era necessaria, o meglio, non era corretta nel programma che volevo fare io.



Tuttavia vorrei ulteriormente porti l'attenzione su un altro codice che svolge lo stesso fine di Inserimento2, ma fatto con 3 cicli: il primo che memorizza la posizione del nuovo elemento, il secondo che provvede a inserire gli elementi fino alla posizione, il terzo oltre quella posizione; te lo scrivo perchè mi dice ancora IndexOutOfBounds...

Codice:
/* Applicazione che ricevendo come parametro un array a non nullo di interi
   ordinato in modo non decrescente e un valore intero v, crea e restituisce un nuovo array
   di interi che contiene il valore v e tutti gli elementi di  a, ed è ordinato in modo
   non decrescente*/

class Inserimento {
	public static int[] inserisci(int[] a, int v) {
	    // pre: a[i] >= a[i-1] && a != null
	    int   i;                                  //contatore
	    int[] b;                                  //array di uscita
	    int pos;                                  //posizione del nuovo elemento

	    b = new int[a.length + 1];

	    pos = -1;

	    for (i=0; i<a.length; i++) {
			if ( (pos == -1) && (a[i]>v) ) pos = i;
		}

		for (i=0; i<a.length && i<pos; i++) {
			b[i] = a[i];
		}

		b[pos] = v;

		for (i=pos+1; i<b.length; i++) {
			b[i] = a[i-1];
		}

		return b;

    }

    private static void visualizza(int[] a) {

		/* metodo che visualizza il nuovo array */
		int i;      //indice di scansione di a

		for (i=0; i<a.length; i++)
		    System.out.print(a[i] + " ");

		System.out.println();
    }

    public static void main(String args[]) {
		  int i;                            //contatore

		  /*test di Inserimento*/
		  System.out.println("Test per int[] inserimento(int[] a, int v)");
		  /*nuovo elemento in prima posizione*/
		  visualizza( inserisci(new int[] {7, 8, 22}, 1) ); // (1, 7, 8, 22)
		  /*nuovo elemento in ultima posizione*/
		  visualizza( inserisci(new int[] {7, 8, 10}, 22) ); // (7, 8, 10, 22)
		  /*nuovo elemento in posizione intermetdia*/
		  visualizza( inserisci(new int[] {3, 4, 8, 10}, 5) ); // (3, 4, 5, 8, 10)
		  /*un solo elemento nell'array, numero da inserire maggiore*/
		  visualizza( inserisci(new int[] {8}, 10) ); //  (8, 10)
		  /*un solo elemento nell'array, numero da inserire minore*/
		  visualizza( inserisci(new int[] {8}, 3) ); // (3, 8)

	}

}
ora ho fatto come mi hai suggerito, ovvero ho inserito il controllo della fine dell'array prima di tutti, ma purtroppo mi dà nuovamente errori di indice... secondo te a che cosa è dovuto? Sto cercando di trovare l'errore anche io...

Grazie mille
__________________
har jeg kommet fra Norge !!!!
I've been for a walk on a winter's day, I'd be safe and warm if I was in L.A. ...
Quant'è bella giovinezza, che si fugge tuttavia; chi vuol esser lieto, sia: non si iscriva a ingegneria!
Nukles è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2005, 11:32   #7
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Quote:
Originariamente inviato da Nukles
Codice:
public static int[] inserisci(int[] a, int v) {
    // pre: a[i] >= a[i-1] && a != null
    int   i;                                  //contatore
    int[] b;                                  //array di uscita
    int pos;                                  //posizione del nuovo elemento

    b = new int[a.length + 1];
    pos = -1;

    for (i=0; i<a.length; i++) {
		if ( (pos == -1) && (a[i]>v) ) pos = i;
    }

    for (i=0; i<a.length && i<pos; i++) {
	b[i] = a[i];
    }

    b[pos] = v;

     for (i=pos+1; i<b.length; i++) {
	b[i] = a[i-1];
     }

     return b;

}
Qui il codice è insicuro per il motivo opposto: un array a cui accedi con indice minore di 0.
Infatti se guardi c'è la possibilità che pos che è inizializzato a -1 non venga mai modificato durante il primo for e resti -1.
In realtà questo valore non ha più senso dopo quel for, e dovresti prevedere un controllo successivo, cioè fare si che pos alla fine abbia in qualsiasi caso il valore giusto.
In questo caso il valore giusto è "a.length" se pos vale -1 dopo il for, infatti solo nel caso in cui tutti gli elementi dell'array siano minori di v pos non viene mai cambiato e resta -1, e quando è così tu vuoi inserire v nell'ultima posizione di b, cioè "a.length".

Quindi riassumendo
Codice:
public static int[] inserisci(int[] a, int v) {
    // pre: a[i] >= a[i-1] && a != null
    int   i;                                  //contatore
    int[] b;                                  //array di uscita
    int pos;                                  //posizione del nuovo elemento

    b = new int[a.length + 1];
    pos = -1;

    for (i=0; i<a.length; i++) {
		if ( (pos == -1) && (a[i]>v) ) pos = i;
    }

    
    if (pos == -1)
         pos = a.length;
    

    for (i=0; i<a.length && i<pos; i++) {
	b[i] = a[i];
    }

    b[pos] = v;

     for (i=pos+1; i<b.length; i++) {
	b[i] = a[i-1];
     }

     return b;

}
Potrebbero esserci altri errori a cui non ho fatto caso, se non va fammi sapere
Ciao
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2005, 11:43   #8
Nukles
Senior Member
 
L'Avatar di Nukles
 
Iscritto dal: Oct 2001
Città: Roma - Norge
Messaggi: 1354
Ecco perfetto grazie alla modifica che mi hai fatto fare ora anche questa versione funziona! Grazie mille...

Insomma, visto il motivo dell'errore, penso che se non ci fossi stato te avrei potuto continuare all'infinito a cercare l'errore, senza trovarlo... infatti guardavo tutt'altre cose.

Ti ringrazio molto, il tuo aiuto mi è servito a tanto. Quindi il valore di "index out of bounds" mi dice la posizione dell'indice fuori dall'array, vero? Posizione non contemplata nella lunghezza dello stesso...
__________________
har jeg kommet fra Norge !!!!
I've been for a walk on a winter's day, I'd be safe and warm if I was in L.A. ...
Quant'è bella giovinezza, che si fugge tuttavia; chi vuol esser lieto, sia: non si iscriva a ingegneria!
Nukles è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2005, 12:32   #9
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Figurati

In Java quando si verifica un errore viene in realtà scatenata un'eccezione; un'eccezione non è altro che un oggetto di classe Exception che descrive l'errore.
Questo serve a fare in modo che non ci sia bisogno di restituire valori strani (tipo -1 o una stringa "errore") quando un metodo si trova in condizioni di errore, ma semplicemente di lanciare un'eccezione non appena si verifica.

Per esempio se devi fare un metodo che calcoli la radice quadrata di un numero reale positivo:
Codice:
public double radice(double numero) throws RadiceException
{
   if (numero < 0)
      throw new RadiceException("Numero negativo" , numero);
   else
      return Math.sqrt(numero);
}
Una cosa simile avviene quando tu accedi ad una indice fuori dai limiti di un'array: qualcuno (sotto da qualche parte) si accorge di questo e ti lancia un'eccezione che significa che l'operazione che hai richiesto non è stata possibile, e che descrive (con una stringa di messaggio data da getMessage() oppure con altri campi dato che Exception si può estendere e quindi realizzare Exception specializzate) qual'è stato l'errore.

L'eccezione, una volta scatenata (per esempio dal metodo radice di sopra), esce direttamente dal metodo (un po come se facesse un return ma senza dare un valore) e continua ad uscire da tutti i metodi chiamanti (per esempio se tu avessi chiamato radice da dentro un metodo "calcolaRadice" uscirebbe anche da calcolaRadice dal punto in cui viene chiamato radice) finchè non trova un blocco "try-catch".

Il blocco try-catch definisce che tipo di eccezione bloccare, per esempio
Codice:
try
{
   radice = calcolaRadice(input);
}catch (RadiceException e)
{
   System.out.println( "Il numero inserito (" + e.numero + ")  è negativo" );
}
e dice anche che cosa fare nel caso si verifichi quella eccezione.
Se l'eccezione è bloccata il programma poi continua subito dopo il blocco "try-catch".

ArrayIndexOutOfBoundsException è una classe che estende Exception, quindi un particolare tipo di eccezione, che dice appunto che l'errore verificatosi è un indice fuori dalle dimensioni.
Se questo può far parte della dinamica del tuo programma (ma in teoria non dovrebbe dato che l'algoritmo dovrebbe essere fatto in modo da rispettare le dimensioni) tu potresti semplicemente "captare" l'eccezione mettendo le operazioni di accesso agli array in un try-catch e comportarti di conseguenza quando questo succede.
Ciao
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2005, 12:43   #10
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Ah un' ultima cosa: per trovare più rapidamente gli errori, quando si scatena un'eccezione non gestita, cioè un'eccezione che non viene "captata" da nessun try-catch ed esce quindi dal programma dando un errore, stampa su standard error (e quindi di solito sulla tua console dos) il testo dello stack trace dell'eccezione.

Lo stack trace è una lista di tutti i metodi (dal più esterno al più interno) attraverso cui l'eccezione si è propagata, e per ognuno dice anche la linea di codice esatta da cui è "arrivata".

Per esempio nel tuo caso vedresti una serie di metodi, tra i quali (in mezzo probabilmente) compare anche il tuo metodo "inserisci", con a fianco il numero della riga di codice in cui è uscita l'eccezione (cioè quella dove fai b[pos] = v immagino).

Se usi un editor di testo normale tipo notepad trovare la riga nel codice è lungo (devi contare i numeri delle righe), mentre se usi un'ambiente di sviluppo apposta (una IDE) tutto questo è automatizzato.
Per esempio se usi Eclipse (che trovi qui gratis) appena si verifica un'eccezione non gestita come la tua ti compare nella console lo stacktrace dell'eccezione e facendo doppio click (mi pare) sopra ti manda direttamente alla riga di codice del file giusto.

Se non ne usi già una ti consiglio Eclipse; poi naturalmente una IDE ti aiuta in molte altre cose come per esempio a fare il debug, l'indentazione, controlla automaticamente la sintassi mentre scrivi ecc...
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
iPhone Air: la nuova generazione potrebb...
Il Galaxy S26 Ultra avrà una batteria da...
EV Clinic cambia un settore: ora produce...
OnePlus ha anticipato l'arrivo della ver...
Amazon ha sospeso la sperimentazione del...
Mark Hamill sarà per sempre Luke ...
Amazon rilancia i bestseller fra cui un ...
Puoi giocare ad Halo in Minecraft? Sì, s...
WhatsApp: in fase di test l'introduzione...
XPeng G9 MY26 segna il record europeo pe...
Apple corregge due gravi vulnerabilit&ag...
DC Comics batte al cinema Marvel per la ...
L'iPhone più sottile di sempre scende di...
Saros di Housemarque punta ad offrire un...
La statale cinese FAW entra in Leapmotor...
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: 16:12.


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