Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    7

    eccezione NoSuchMethodError: main

    Salve..
    il seguente programma compila,ma crea subito l'eccezione:

    java.lang.NoSuchMethodError:main
    Exception in thread "main">Exit Code: 1

    Il codice è questo:
    codice:
    //Scrivere un programma Java che generi a caso un significativo numero di espressioni e li conservi 
    // in un file di oggetti
    
    import java.io.*;
    public class progProva
    {
        public void main(String [] args) throws IOException
        {
            /*
            Scrivere un programma JAVA che generi a caso un significativo numero di espressioni e li conservi in un file di oggetti
            */
            String nomeFile = "FileContenenteEspressioni.dat";
            scriviFile(nomeFile);
        }
        
        //Questo è il metodo utilizzato per scrivere le espressioni nel file, il numero di espressioni è casuale
        public void scriviFile(String nomeFile) throws IOException
        {
            
            ObjectOutputStream Oout;//creiamo il file di output che contiene le espressioni aritmetiche in forma infissa
            try
            {
                Oout = new ObjectOutputStream (new FileOutputStream (nomeFile));
            }
            catch(IOException e)
            {
                System.out.println("Si è verificato L'errore: "+e);
                return;
            }
            
            
            int numeroEspressioni = (int)(Math.random()*(100))/*+min*/; //generiamo casualmente il numero di espressioni
            espressioneInfissa exp = null;
            String stringaExp = "";
            for(int i=0; i<numeroEspressioni; i++)//leggendo il numero di espressioni
            {
                stringaExp = generaEspressioni(numeroEspressioni);//richiamiamo il metodo ricorsivo per generare le espressioni in forma infissa
                exp = new espressioneInfissa(stringaExp);
                try
                {
                    Oout.writeObject(exp);//scriviamo nel file le espressioni infisse
                }
                catch(IOException e)
                {
                    System.out.println ("Scrittura file eseguita "+e);
                }
            }
            
            Oout.close();//chiudiamo il file delle espressioni
            
        }
        
        //Questo è il metodo usato per generare a caso espressioni di forma Infissa
        public static String generaEspressioni(int numeroEspressioni) //throws NoClassDefFoundError 
        {
            String espressione = "";
            espressione = generaEspressioniAux(espressione, numeroEspressioni);
            System.out.println("Espressione:\t"+espressione);
            return espressione;
        }
        
        //Con questo metodo che viene chiamato ricorsivamente formo le espressioni
        public static String generaEspressioniAux(String s, int numeroEspressioni)
        {
            s += '(';
            char [] Operandi = {'+', '-', '/', '*'};
            
            int caso = (int)(Math.random()*100);
            int maxNumExp=numeroEspressioni;
            System.out.println("Espressioni da creare:"+maxNumExp);
            //Uso delle percentuali diverse nei vari casi per evitare che vengano espressioni troppo lunghe
            //Ovviamente potrei usare diverse percentuali per cercare di influenzare un po la lunghezza dell'espressione.
            for(int i=maxNumExp; i<numeroEspressioni; i--)
            {
                if(maxNumExp!=0)
                {
                    if(caso < 40)
                    {
                        //System.out.println ("uno");
                        s += (int)(Math.random()*100);
                        s += Operandi[(int)(Math.random()*Operandi.length)];
                        s += (int)(Math.random()*100);
                        //System.out.println(s);
                        maxNumExp--;
                    }   
                    else if(caso <60)
                    {
                        //System.out.println ("due");
                        s += (int)(Math.random()*100);
                        s += Operandi[(int)(Math.random()*Operandi.length)];
                        s = generaEspressioniAux(s, numeroEspressioni);
                        maxNumExp--;
                    }
                    else if(caso < 85)
                    {
                        //System.out.println ("tre");
                        s = generaEspressioniAux(s, numeroEspressioni);
                        s += Operandi[(int)(Math.random()*Operandi.length)];
                        s += (int)(Math.random()*100);
                        maxNumExp--;
                    }
                    else
                    {
                        //System.out.println ("quattro");
                        s = generaEspressioniAux(s, numeroEspressioni);
                        s += Operandi[(int)(Math.random()*Operandi.length)];
                        s = generaEspressioniAux(s, numeroEspressioni);
                        maxNumExp--;
                    }
                    s += ')';
                }
            }
            return s;
        }
    }
    qualcuno di buona volontà potrebbe dirmi in cosa consiste questa eccezione e come posso risolverla?
    GRAZIE

  2. #2
    Utente di HTML.it L'avatar di salcam
    Registrato dal
    Dec 2005
    Messaggi
    193
    Scusa ma non capisco cosa sia espressioneInfissa, penso sia un tuo metodo. Ci potresti aiutare postandolo qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    7
    ecco il metodo espressioneInfissa:

    codice:
    //Class per definire un'espressione Infissa
    import java.io.*;
    class espressioneInfissa implements Serializable
    {
        private String espressione;
        private Pila Formula;
        private Pila Operatori;
        private Pila Operandi;
            
        //------------------------------------------------
        //Costruttore dell'espressione
        public espressioneInfissa(String _espressione)
        {
            espressione = _espressione;
            Formula = new Pila();
            Operatori = new Pila();
            Operandi = new Pila();
        }
        //------------------------------------------------
        
        //Metodo che restituisce la Stringa che costituisce l'espressione
        public String getEspressione()
        {
            return espressione;
        }
        
        //Metodo che restituisce il risultato dell'espressione, questo richiama il metodo tokenizza e il metodo svolgi operazione
        public int risultato()
        {
            tokenizza();
            while(!Formula.isEmpty())
            {
                String tokenCorrente = (String)(Formula.pop());//il token corrente è il segmento corrente dell'espressione
                if (tokenCorrente.equals("+") || tokenCorrente.equals("*") || tokenCorrente.equals("-") || tokenCorrente.equals("/"))  // se il token è un operatore
                    Operatori.push(tokenCorrente);//inserisci il token nella pila degli operatori
                else//altrimenti
                    if (tokenCorrente.equals( ")" )) // se il token è la parentesi chiusa devo fare una operazione aritmetica
                        svolgiOperazione();//e richiamo il metodo svolgiOperazione
                    else // altrimenti il token è un operando
                        Operandi.push(tokenCorrente);//e lo aggiungo nella pila degli operandi
                /*
                System.out.println("TRACCIA");
                System.out.println("formula"+Formula);
                System.out.println("operatori"+Operatori);
                System.out.println("operandi"+Operandi);
                */
            }
            
            int risultato=Integer.parseInt((String)(Operandi.pop()));
            if (Operandi.isEmpty())//se nella pila degli operandi non ci sono più operandi
                return risultato;//restituisce il risultato
            else
            {
                System.out.println("espressione non ben formata");
                return -1;
            }
        }
        
        //Questo metodo viene richiamato dal metodo risultato, man mano che trova le ')', ed esegue
        //le operazioni tra gli operandi richiesti dall'operatore, se si effettua una divisione per zero
        //lancia l'eccezione aritmetica
        public void svolgiOperazione()
        {
            int op2=Integer.parseInt((String)(Operandi.pop()));
            int op1=Integer.parseInt((String)(Operandi.pop()));
            String operatore = (String)(Operatori.pop());
            int risultato = 0;
            // vede che tipo di operazione deve eseguire in base all'operatore che viene trovato in cima alla pila
            if (operatore.equals("+")) 
                risultato = op1+op2;
            else 
                if(operatore.equals("*"))
                    risultato = op1*op2;
                else
                    if(operatore.equals("-"))
                        risultato = op1-op2;
                    else
                    {
                        try
                        {
                            risultato = op1/op2;
                        }
                        catch(ArithmeticException e)//se non puo' eseguire operazioni restituisce un messaggio di errore(eccezione)
                        {
                            System.out.println ("Si è verificato l'errore "+e);
                        }
                    }
            
            Operandi.push(""+risultato);//altrimenti prende il risultato e lo inserisce nella pila degli operandi
        }
        
        //Questo metodo suddivide la stringa dell'espressione in 3 pile, contenenti la formula dell'espressione
        //per intero escludendo le '(', una pila contiene gli operatori ed infine l'ultima contiene gli operandi
        public void tokenizza()
        {
            int cont = espressione.length()-1;
            char corrente;
            String temp = "";
            while (cont>=0)
            {
                corrente = espressione.charAt(cont);
                if(corrente == ' ')
                    cont--;
                else
                    if(corrente == '(')
                    {
                        if(!temp.equals(""))
                        {
                            Formula.push(temp);
                            temp="";
                        }
                        cont--;
                    }
                    else
                        if((corrente == ')') || (corrente == '+') || (corrente == '*') || (corrente == '-') || (corrente == '/'))
                        {
                            if(temp.equals(""))
                            {
                                temp += corrente;
                                Formula.push(temp);
                                temp = "";
                                cont--;
                            }
                            else
                            {
                                Formula.push(temp);
                                temp = "";
                                temp += corrente;
                                Formula.push(temp);
                                temp = ""; // svuoto t
                                cont--;
                            }
                        }
                        else
                        {
                            temp = corrente + temp;
                            cont --;
                        }
            }
        }
    }
    spero che adesso mi possiate aiutare..
    GRAZIE

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    hai dimenticato di mettere static al main!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    7
    grazie tante!!

    che svista! ma come posso succedere queste cose?!

    cmq ancora grazie..

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da orax841
    grazie tante!!

    che svista! ma come posso succedere queste cose?!

    cmq ancora grazie..
    di niente!

    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.