Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Far riavviare un programma mentre è in esecuzione??

    Ciao a tutti,
    premetto che sono al 3° anno, superiore ovviamente, quindi ho appena iniziato con java.

    Ho scritto un codice che converte un numero dal sistema decimale a quello romano.
    Provando, per curiosità, anche ad utilizzare finestre grafiche, del tipo:

    JOptionPane.showMessageDialog (null, "Errore nell' immissione!" , "ERRORE", JOptionPane.ERROR_MESSAGE);

    Mi servirebbe un modo attraverso il quale l' utente, possibilmente da una finestra grafica, possa decidere se riavviare o no il programma! Il problema ulteriore è che questa possibilità di "riavvio" si deve trovare in 3/4 punti differenti! come posso fare??
    Ho provato ad usare l' istruzione ";continue;" creando una specie di "megaciclo", funziona, ma sono riuscito a metterlo solo in uno dei punti che mi servono!
    (Altra domandina veloce: finestra grafica con 4 opzioni, ognuna che porta alla relativa sezione, come posso realizzarla??)
    Per eventuali risposte tenete conto che sono un principiante.
    Grazie mille in anticipo!!
    "I' m on the highway to hell!!" \m/

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ciao e benvenuto. Veniamo subito al dunque: probabilmente c'è qualche "difetto" di programmazione dovuta al fatto che sei all'inizio. Sembra strano che in ambiente grafico tu abbia bisogno di loop infiniti per gestire l'immissione di dati. Uno dei vantaggi dell'ambiente grafico è proprio quello di poter riutilizzare l'interfaccia grafica.

    Ti consiglio di dare un'occhiata sul sito della Oracle a "The Swing Tutorial", per intero. Ti vengono presentati in carrellata, tutti i componenti e contenitoroi, i Layout Manager ed i Listeners utili a sviluppare un'applicazione grafica.

    In definitiva, il riavvio di un'applicazione dovrebbe avvenire solo per consentire l'update di file altrimenti in uso nell'applicazione stessa, e se e solo se davvero necessario. Per far ripartire una raccolta dati... bhè, è una bella forzatura (come dire, se una volta usata la calcolatrice del tuo sistema operativo per fare un'operazione tu dovessi chiuderla e riaprirla per farle fare un'altra operazione)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Grazie mille per aver risposto! E grazie del consiglio, andrò a controllare lì!

    Comunque, per capirci, quello che intendo è: finisce il programma, ha convertito il numero e ti chiede ("Convertire un altro numero?") [SI/NO], se SI torna su e ti richiede, tramite la finestra di input che ho messo, di inserire il numero; se NO termina.

    Una cosa del genere vorrei che succedesse in caso di errori di inserimento, mi spiego: se nell' inserimento, "l' utente", invece di un numero inserisce 'a', ho inserito nella "catch" un messaggio d' errore che evidenzi il problema, dopodiché vorrei mettere un' altra finestra che chieda se si vuole "reiniziare" il programma, portandolo al punto dell' inserimento, oppure andare nella sezione delle informazioni.

    Credo che sia un po' confusionale come descrizione, ma spero che riuscirai a capirmi!

    Potrei anche copiare il codice ma non è molto corto (principalmente a causa delle varie stringhe presenti).
    "I' m on the highway to hell!!" \m/

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ti conviene postare il codice, perchè così si va solo per supposizioni.

  5. #5
    Patrick, seguo il tuo consiglio! Sono sicuro che, anche se il programma funziona. troverete molti "errori", e anche modi per risparmiare memoria (ma per il momento questo non è un problema).

    codice:
    /**
     * @(#)DecRom.java
     * V.P.
     * @version 1.3 2012/11/1
     */
     
     import java.io.*;
     import javax.swing.*;
    
     	
    public class DecRom 
    
    {
        
        public static void main(String[] args) 
        
        {
        	  int N=0, v, n=0;
        	   String R="";
        	   
        	   
        	
        	InputStreamReader In = new InputStreamReader (System.in);
        	BufferedReader Tastiera = new BufferedReader (In);
        	
        	   try
        	   {
        	   	 JOptionPane.showMessageDialog (null, "Immettere, nella finestra successiva, uno dei seguenti valori: \n '0' per iniziare il programma, \n"+
        	   	 	                            " '1' per avere informazioni sull' uso, \n '2' per i crediti.", 
        	   	                                "Info", JOptionPane.INFORMATION_MESSAGE);    
                v=Integer.parseInt (JOptionPane.showInputDialog("Inserire il valore per andare alla relativa sezione."));   
                
                  if (v>2)
                    {
                  
                    	JOptionPane.showMessageDialog (null,"Errore! Inserire un valore compreso tra '0' e '2' per andare alle relative sezioni. \n Riavviare il programma! \n Grazie!",
                    	                                "ERRORE!", JOptionPane.ERROR_MESSAGE);
                    }
                    
    
                  else if (v==1)
                    {
                    
                    JOptionPane.showMessageDialog (null, "Il programma converte numeri dal sistema di numerazione decimale al sistema romano. \n" +  
                    	                                 "Inserire, quando richiesto, il valore del numero da convertire.");
    	        JOptionPane.showMessageDialog (null, "ATTENZIONE! Il programma può convertire solo i numeri INTERI compresi tra 0 e 3999!", "ATTENZIONE!", JOptionPane.WARNING_MESSAGE);
                    JOptionPane.showMessageDialog (null, "Riavviare il programma per proseguire. \n Grazie!");
        	   	 
                    }
        	   	 
        	   	  else if (v==2)
        	   	    {
        	   	      
        	   	      JOptionPane.showMessageDialog (null, "Convertitore Decimale/Romano. \n Autore: Valerio Pitorri \n"+
        	   	      	                             "Versione 1.3 \n 3/11/12", "Dettagli", JOptionPane.PLAIN_MESSAGE);
        	   	      JOptionPane.showMessageDialog (null, "Riavviare il programma per continuare. \n Grazie!", "Info", JOptionPane.INFORMATION_MESSAGE);
        	   	      	
        	   	    }
        	   	 
        	   	  else if (v==0)
        	        
        	   	  {
        	   	 
        	   	  	N=Integer.parseInt (JOptionPane.showInputDialog(null, "Inserire il numero da convertire: ", "Inserisci il valore", JOptionPane.PLAIN_MESSAGE));
        	   	  	
        	   	 if (N>3999)
        	   	 	JOptionPane.showMessageDialog (null, "Errore! Il numero deve essere compreso tra 0 e 3999!", "ERRORE!", JOptionPane.WARNING_MESSAGE);
        	   	 	
        	   	 	else
        	   	   {
        	   	 	
        	   	 	 n=N;
        	   	  	
        	   	  	  while (N>=1000)
        	   	  	    {
        	   	  	        R=R.concat("M"); 
        	   	  	        N=N-1000 ;	
        	   	  	    }
        	   	  	    
        	   	  	       if (N>=900)
        	   	  	    	  {
        	   	  	    	  	R=R.concat("CM");
        	   	  	    	  	N=N-900 ;
        	   	  	    	  }
        	   	  	    	  
        	   	  	  while (N>=500)
        	   	  	    {
        	   	  	    	R=R.concat("D");
        	   	  	    	N=N-500 ;	
        	   	  	    }
        	   	  	    
        	   	  	    	if (N>=400)
        	   	  	    	   {
        	   	  	    	   	R=R.concat("CD");
        	   	  	    	   	N=N-400 ;
        	   	  	    	   }
        	   	  	    
        	   	  	  while (N>=100)
        	   	  	    {
        	   	  	    	R=R.concat("C");
        	   	  	    	N=N-100 ;	
        	   	  	    }
        	   	  	    
        	   	  	       if (N>=90)
        	   	  	    	  {
        	   	  	    	  	R=R.concat("XC");
        	   	  	    	  	N=N-90 ;
        	   	  	    	  }
        	   	  	
        	   	  	  while (N>=50)
        	   	  	    {	
        	   	  	    	R=R.concat("L");
        	   	  	    	N=N-50 ;
        	   	  	    }
        	   	  	    
        	   	  	       if (N>=40)
        	   	  	    	  {
        	   	  	    	  	R=R.concat("XL");
        	   	  	    	  	N=N-40 ;
        	   	  	    	  }
        	   	  	
        	   	  	  while (N>=10)
        	   	  	    { 
        	   	  	        R=R.concat("X");
        	   	  	        N=N-10 ;
        	   	  	    }
        	   	  	    
        	   	  	       if (N==9) 
        	   	  	    	  {
        	   	  	    	  	R=R.concat("IX");
        	   	  	    	  	N=N-9 ;
        	   	  	    	  }
        	   	  	   
        	   	  	  while (N>=5)
        	   	  	    {
        	   	  	       R=R.concat("V");
        	   	  	       N=N-5 ;
        	   	  	    } 
        	   	  	    	
        	   	  	  while (N>=1)
        	   	  	    {
        	   	  	      if (N==4)
        	   	  	        {
        	   	  	      
        	   	  	      	R=R.concat("IV");
        	   	  	      	N=N-4 ;
        	   	  	      	
        	   	  	        } 
        	   	  	      	
        	   	  	      	else 
        	   	  	      	{
        	   	  	      	
        	   	  	      	  R=R.concat("I");
        	   	  	      	  N=N-1 ;
        	   	  	      	  
        	   	  	      	}
        	   	  	      	
        	   	  	    }
       	             
        	   	     }
       	            
       	             JOptionPane.showMessageDialog (null, "Il numero inserito ("+n+") equivale a: "+R, "Risultato", JOptionPane.INFORMATION_MESSAGE);
       	             JOptionPane.showMessageDialog (null, "Grazie per aver usato questo convertitore!", "Grazie", JOptionPane.PLAIN_MESSAGE);
       	            
        	   	   }
        	   	   
        	   }
        	   
        	       catch (Exception E)
        	       {
        	            
        	            JOptionPane.showMessageDialog (null, "Errore nell' immissione! \n Se sono necessari chiarimenti riavviare"+
        	            	                           " il programma e premere '1'. \n Grazie", "ERRORE", JOptionPane.ERROR_MESSAGE);
        	              
        	       }
        	       
        }
    }

    "I' m on the highway to hell!!" \m/

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il primo consiglio che ti posso dare, è di evitare al momento la parte grafica, è l'ultimo dei tuoi problemi. Il primo è quello di non utilizzare un approccio stile C, ma di sfruttare la OOP organizzando il codice in classi.

    Dici che vuoi utilizzare finestre grafiche... intendi JFrame?

    Per riavvio dell'applicazione ti riferisci al far iniziare ancora il programma dall'inizio, se ho ben capito. Corretto?
    Ti consiglio vivamente di dedicarti al Java lasciando perdere la grafica, almeno per ora.

  7. #7
    Intendevo un qualcosa che avrebbe riportato all' inserimento del valore all' inizio, quello che ti porta alle varie sezioni ('v').

    Comunque ti darò ragione, lascerò perdere la grafica per il momento. Il fatto è che sono curioso è ho provato ad avventurarmi oltre ciò che ci hanno spiegato! :/
    Forse è meglio aspettare che sia tutto più chiaro!

    Grazie mille per le risposte e la pazienza!!
    "I' m on the highway to hell!!" \m/

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Piuttosto continua a studiare Java, ma la grafica è l'ultima cosa.

    Comunque per non lasciare le tue domende senza risposta... ti serve un ciclo iterativo (while o for; in questo caso while è più indicato). Questo però non cambia il fatto che sia anche concettualmente errato, oltre che brutto con tutti gli if-else in quel modo. :P (e non rispettare per nulla la OOP).

  9. #9
    Ok! grazie mille di nuovo!
    "I' m on the highway to hell!!" \m/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.