[Try/Catch] Problema con annidamento

di il
5 risposte

[Try/Catch] Problema con annidamento

Buon giorno ragazzi, ho un grande problema. Ho creato questo codice.

while(true){
	try{
		try{

     	} catch (Exception ex){
     		if(!"[[:digit:]]".equals(input.nextLine())){
            }

     	}
     } catch (Exception ex){
     	 if(!"[[:digit:]]".equals(input.nextLine())){
         }
     }
}
Il problema gigantesco è: se ho un errore nel try più interno me lo gestisce quello esterno. Come si può fare per risolvere? Grazie

5 Risposte

  • Re: [Try/Catch] Problema con annidamento

    Il try piu' interno non contiene codice, quindi che intendi dire?
    In Java c'e' l' Error e l'Exception, che derivano da Throwable.
    Che cosa intendi per errore?
  • Re: [Try/Catch] Problema con annidamento

    Non c'è codice perchè non l'ho messo io! Ma in realtà è così. Nn avevo scritto altro per non complicare e naturalmente ci sonno delle altre cose che faccio con questi interi presi in input.
    while(true){
       try{
             input.nextInt();
          try{
              while(true){
                 input.nextInt();
                   }
    
            } catch (Exception ex){
               if(!"[[:digit:]]".equals(input.nextLine())){
                }
    
            }
         } catch (Exception ex){
             if(!"[[:digit:]]".equals(input.nextLine())){
             }
         }
    }
    In sintesi, prendo un intero nel primo while e nel primo try faccio i miei impicci. In base che intero metto entro nel secondo while e nel secondo try in cui devo inserire l'ennesimo intero, dove, nel caso inserissi una stringa mi dovrebbe ripetere il ciclo e permettere dunque di riprovare a dare in input un intero solo che però il catch più interno me lo gestisce quello esterno! Come faccio a dividerli?
  • Re: [Try/Catch] Problema con annidamento

    KILLERIX ha scritto:


    Come faccio a dividerli?
    Il tuo codice comunque è contorto .... e poi tra l'altro ... che ti serve (e che senso ha):

    if(!"[[:digit:]]".equals(input.nextLine())){

    ???

    L'utente deve non digitare i caratteri [ [ : d i g i t : ] ] ??

    Se hai bisogno di chiedere in input numeri o altro che è da validare, hai pensato di incapsulare la logica di input, verifica e ripetizione (in ciclo finché non è valido) in un metodo apposito o magari in una classe separata?
  • Re: [Try/Catch] Problema con annidamento

    Cosa significa: la logica di input?
    E cmq
    if(!"[[:digit:]]".equals(input.nextLine())){
    mi serve nel catch perchè il mio errore lo gestisco senza fare nulla e ripetendo in il mio while! Quando digito il comando corretto c'è il break! A me serve solo capire come gestire il catch più internamente e quindi in caso di errore tornare nel ciclo più interno invece di quello esterno!
  • Re: [Try/Catch] Problema con annidamento

    Risolto xD Avevo messo fuori dal try "input.nextInt()"
Devi accedere o registrarti per scrivere nel forum
5 risposte