Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: rox on 14-03-2009, 08:03:16



Title: creazione eccezione
Post by: rox on 14-03-2009, 08:03:16
salve colleghi vorrei creare una nuova eccezione estendendo la classe Exception,qualcuno saprebbe dirmi come si fa?nel file del prof  non l'ho capito bene per il fatto che usa la classe scanner mai utilizzata da noi!grazie in anticipo per la risposta.


Title: Re:creazione eccezione
Post by: Vivynz on 14-03-2009, 10:21:56
ma lo scanner serve solo per inserire l'input non centra con l'eccezione..


Title: Re:creazione eccezione
Post by: Fr3d3R!K on 14-03-2009, 10:43:49
EDITED
scusate l'erroruccio, non ci ho fatto caso...


Title: Re:creazione eccezione
Post by: rox on 14-03-2009, 16:03:13
non ho capito niente! qualcuno mi può aiutare? .huh


Title: Re:creazione eccezione
Post by: Aigor on 14-03-2009, 16:20:17
non è possibile pubblicare codice sulla sezione programmazione 2, non so se ne eri a conoscenza, quindi utilizza e studia gli esempi e il codice del professore.


Title: Re:creazione eccezione
Post by: zElOtO on 14-03-2009, 16:22:49
non è possibile pubblicare codice sulla sezione programmazione 2, non so se ne eri a conoscenza, quindi utilizza e studia gli esempi e il codice del professore.


Why??


Title: Re:creazione eccezione
Post by: rox on 14-03-2009, 16:31:59
perchè non si può scrivere codice?
cmq prof se vede questo topic mi potrebbe spiegare come si fa a creare una nuova eccezione ?grazie in anticipo


Title: Re:creazione eccezione
Post by: djjeck on 14-03-2009, 17:36:13
Caspita, che provvedimento drastico!
Ma è permesso cercare codice tramite google? o le matricole hanno un blocco con l'ISP?

Se vuoi estendere la classe Exception significa che hai l'esigenza di lanciare un'eccezione diversa da quelle che java fornisce (IllegalArgument, ArrayIndexOutOfBounds, Mathematical), e che abbia qualche peculiarità, solitamente la conservazione di un qualche dato necessario alla sua gestione.
Se non è questo il caso, probabilmente non ti serve, ti basta una RuntimeException generica.

Se vuoi estendere un'eccezione, ti basta creare una nuova classe che estenda Exception. Fine.
Le eccezioni sono normalissime classi. Se dentro ci vuoi mettere un array, un contatore, un metodo compareTo, è come per tutte le altre classi.

Altri dubbi?


Title: Re:creazione eccezione
Post by: isuccia89 on 14-03-2009, 17:52:51
non è possibile pubblicare codice sulla sezione programmazione 2, non so se ne eri a conoscenza, quindi utilizza e studia gli esempi e il codice del professore.


forse non è possibile pubblicare codici ke servono da "soluzione" ma se qualcuno ha un dubbio e vuole postare il lavoro ke ha fatto x eventuali chiarimenti e correzioni non può? .penso


Title: Re:creazione eccezione
Post by: zElOtO on 14-03-2009, 19:49:32
Capisco che postare la soluzione senza che venga capita non serve a molto..Ma a volte è parecchio utile..Boh io sono contrario  :boh


Title: Re:creazione eccezione
Post by: rox on 14-03-2009, 20:16:23
io volevo creare una eccezione com e quella che si scatena non appena si tenta una divisione per 0.l'eccezione che io voglio fare deve essere scatenata non appena si tentea di stampare a video il risultato di un numero per 4.cioè se io  scrivo System.out.println(n*4) il compilatore mi deve segnalare un errore del tipo[ Exception in thread "main" java.lang.ArithmeticException: * four.]avete capito cio che voglio dire?spero di sì.attendo risposte.grazie in anticipo


Title: Re:creazione eccezione
Post by: djjeck on 14-03-2009, 22:47:39
Allora quello che vuoi fare tu non è creare una nuova eccezione, è creare un nuovo trigger di eccezioni.
Beh, non puoi.
Le eccezioni possono essere generate in due modi: o esplicitamente, con "throw new ..." oppure dalla Java Virtual Machine.

Per i casi base, come quando dividi un numero per 0, o accedi ad una locazione inesistente di un array, è l'interprete JVM che genera automaticamente un'eccezione, e la passa al codice scritto da te. Non puoi creare niente di simile, via codice.

Le uniche eccezioni che puoi creare sono del tipo via codice.
Se vuoi creare un'eccezione che agisce sulla moltiplicazione, devi fare in modo che ci sia codice scritto da te che intercetta un tentativo di moltiplicazione. E poi, una volta intercettata, scrivi "throw new ArithmeticException"
Ma temo non sia fattibile. La tua richiesta mi sembra quantomeno strampalata, sei sicuro che ti serva un'eccezione? Non basta evitare di moltiplicare per 4?

Inoltre: non è il compilatore che segnala le eccezioni. Le eccezioni sono in fase di esecuzione, non di compilazione. Non vorrei puntualizzare troppo, ma dato che la tua richiesta non mi è chiara, cerco di fare chiarezza quanto posso...


Title: Re:creazione eccezione
Post by: ottobit on 14-03-2009, 23:12:00
L'eccezione "tipo" fatta a lezione riguardante la divisione per zero conteneva due costruttori:

Il primo senza parametri in entrata.
Il secondo con una stringa messaggio.

Credo che l'implementazione standard di un'eccezione sia questa,ma forse il tuo problema sta nel capire il punto esatto in cui lanciarla,cioè quando verrà stampato (N dato in input moltiplicato per 4)?

ps.:Si è capito quello che volevo dire??? :boh
ps.2:Perchè non si può lanciare l'eccezione quando si tenta di stampare a video n*4,credo di non aver capito.....!? .penso


Title: Re:creazione eccezione
Post by: djjeck on 14-03-2009, 23:27:19
Perchè non si può lanciare l'eccezione quando si tenta di stampare a video n*4,credo di non aver capito.....!? .penso

In parole povere e pratiche, un'eccezione si può lanciare soltanto così:
Code:
if(condizione che non va bene)
    throw new QualEIlProblemaException("descrizione del problema");

In questo caso che ci metti dentro l'if?
Non puoi catturare l'evento di stampa, né quello di moltiplicazione.
Come dicevo prima, se un'eccezione viene lanciata quando si fanno operazioni base, come la divisione, non è perché è stato scritto del codice che lo fa, ma perché lo fa la JVM automaticamente, ed il suo comportamento non si può modificare.

E poi da quanto ho capito, non dovrebbe essere limitato alla stampa, l'eccezione dev'essere lanciata in una qualsiasi operazione di moltiplicazione, se almeno uno dei due fattori vale 4.


Title: Re:creazione eccezione
Post by: ottobit on 15-03-2009, 03:53:05
OPS........Hai perfettamente ragione,dimenticavo che all'interno dell'if ci stanno soltanto valori di confronto......

Ma, se come dici tu, il controllo viene fatto durante il confronto, ipotizzando che verrà subito dopo stampato, non va bene uguale?O si va fuori tema....?E soprattutto quest'esercizio esiste??perchè mi sembra poco utile..


Title: Re:creazione eccezione
Post by: djjeck on 15-03-2009, 09:55:33
Questo esercizio non esiste perché in Java non si può fare nulla di simile. Forse è stato frainteso.
In questo thread stiamo parlando di una cosa assurda, che crea confusione. E io la sto prendendo troppo sul serio =)


Non c'è modo di capire che è avvenuta una moltiplicazione per 4, dopo il println.
Quando fai
System.out.println(n*4);
non resta alcuna traccia della moltiplicazione avvenuta.
Se hai già studiato IJVM, ciò che avviene a livello macchina è soltanto
ILOAD n
BIPUSH 4
IMUL
Non puoi intercettare queste istruzioni di basso livello in nessun modo, dopo che sono state eseguite.
Prima ancora del println, resta un semplice numero intero sullo stack.
Dopo il println, neppure quello.


Inoltre non avrebbe senso scrivere una cosa del genere:
Code:
System.out.println(n*4);
if(la moltiplicazione precedente era 4)
  throw new RuntimeException("moltiplicazione per 4");
Se il 4 lo stai scrivendo tu, lo sai già che c'è una moltiplicazione per 4, allora lancia l'eccezione e basta. Oppure non lo scrivere. Penso che la necessità sia di intercettare
Code:
System.out.println(a*b);
quando o a o b valgono 4.
Allora puoi fare
Code:
if((a == 4) || (b==4))
  throw new RuntimeException("tentativo di moltiplicazione per 4");
System.out.println(a*b);
Ma così stai controllando soltanto questa moltiplicazione, e bisogna farlo per ogni altra moltiplicazione nell'intero codice.


rox, intervieni e spiegaci cosa ti serve.

Se il problema ha un senso, ci sono delle soluzioni, ma sono di tipo diverso, e si studiano più in là.
  • Si può dichiarare qualche trigger in AspectJ, ma poco efficace in realtà (ingegneria del software 2).
  • Si può implementare una sandbox, ovvero un interprete JVM che fa più controlli (sicurezza).
  • Si può fare un'analisi statica del codice, dopo la compilazione, per individuare qualche caso (ma non tutti) e segnalarlo prima dell'esecuzione (compilatori? forse).


Title: Re:creazione eccezione
Post by: Vivynz on 15-03-2009, 10:54:17
Ma da quello che ho capito io non si possono postare le soluzioni corrette agli esercizi..ma se ad esempio ho un problema con il codice, come faccio a farmi aiutare sul trovare gli errori se il codice non si può postare? .penso


Title: Re:creazione eccezione
Post by: djjeck on 15-03-2009, 11:07:04
Credo che piuttosto che applicare le regole ciecamente, sia meglio comprendere e rispettare il divieto reale, ovvero quello di non fornire codice da stampare su fogliettini da portare all'esame, o da imparare a memoria.

Detto questo, potresti anche provare a postare soltanto la parte che non ti convince, invece di tutta la classe.
Spero non sia un problema, se hai un problema significa che è pure codice che non funziona... =)


Title: Re:creazione eccezione
Post by: Vivynz on 15-03-2009, 11:09:40
ecco bè infatti  .smile


Title: Re:creazione eccezione
Post by: rox on 18-03-2009, 18:53:38
vi ringrazio per le risposte.cmq da quanto ho capito io non si può creare una eccezione che viene scatenata in runtime.quindi ciò che dicevo io non lo posso fare.non è così?