Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    codice "sbagliato" dove?perchè?

    ho creato all'interno di una classe un metodo statico che prendendo cm parametro una stringa-funzione,cioè una stringa che dovrebbe rappresentare una funzione matematica(ex:x^2+3x+e^x),talemetodo dovrebbe dividere la stringa-funzione in monomi non appena trova un "+" o un "-" con una sorta di ricorsione...
    ma il metodo anzichè dare la divisione corretta della stringa riporta della ripetizioni ma nn capisco perchè,e dove è sbagliato,mi aiutate voi ed eventualmente mi date suggerimenti per farlo funzionare meglio?
    codice:
    class AnalizzatoreStringa{
    private static LinkedList l=new LinkedList();
    public static LinkedList dividiInMonomi(String s){
    		String t=s;
    		int i=0;
    		int indexp=t.indexOf("+");
    		int indexm=t.indexOf("-");
    		if(indexp==-1&&indexm==-1){
    			l.add(t);
    		}
    		if(indexp!=-1&&indexm!=-1){
    			if(indexp<indexm){
    				l.add(t.substring(i,indexp));
    				i=indexp+1;
    				s=t.substring(i,t.length());
    				indexp=s.indexOf("+");
    				dividiInMonomi(s);
    			}
    			if(indexm<indexp){
    				l.add(t.substring(i,indexm));
    				i=indexm+1;
    				s=t.substring(i,t.length());
    				indexm=s.indexOf("-");
    				dividiInMonomi(s);
    			}
    		}
    		if(indexp!=-1&&indexm==-1){
    			l.add(t.substring(i,indexp));
    			i=indexp+1;
    			s=t.substring(i,t.length());
    			indexp=s.indexOf("+");
    			dividiInMonomi(s);
    		}
    		if(indexm!=-1&&indexp==-1){
    			l.add(t.substring(i,indexm));
    			i=indexm+1;
    			s=t.substring(i,t.length());
    			indexm=s.indexOf("-");
    			dividiInMonomi(s);
    		}
    		return l;
    	}
    //metodo main
    public static void main (String [] args){
    		String t="5x^2+6x-e^x";
    		LinkedList l=new LinkedList();
    		l=dividiInMonomi(t);
    		System.out.println(l);
    
    	}
    }
    data la stringa-funzione t="'x^2+6x-e^x"
    l'output che vorrei attraverso qst codice vorrei fosse questo:"[5x^2,6x,e^x]"
    e invece qll che stampa realmente è qst:"[5x^2, 6x, e^x, 6x, e^x]"
    perchè?cosa ho sbagliato?
    grazie 1000!

  2. #2
    a meno che non è un compito sui metodi ricorsivi, il primo errore che hai fatto è non aver studiato bene i metodi delle librerie java delle stringhe, puoi riscrivere il tuo metodo dividiInMonomi così:

    codice:
    	public static LinkedList dividiInMonomi(String s) {
    	    for(String a : s.split("\\+")) {
    		for(String b : a.split("\\-")) {
    		    l.add(b);
    		}
    	    }
    	    return l;
    	}
    split di una stringa in java

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    wow...perfetto...nn avevo mai visto o studiato lo "split"...grz!
    l'unica cosa è:non capisco tramite la sintassi cosa fa...finora alle lezioni all'università non ho mai visto istruzioni di qst tipo cn l'utilizzo dei due punti ecc ecc...
    potresti darmi una spiegazione breve di quello "che significa" tale sintassi(di qst metodo)???

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da GoodbyeSoberDay
    codice:
    	    for(String a : s.split("\\+")) {
    		for(String b : a.split("\\-")) {
    		    l.add(b);
    		}
    	    }
    Certo ma .... se uno conosce bene le espressioni regolari allora sa che si può fare tutto con 1 sola regex ... non certo spezzare la cosa come sopra! E che basterebbe una semplice "classe" di caratteri:

    for (String token : str.split("[+-]")) { ... }

    Originariamente inviato da zipangulu
    cn l'utilizzo dei due punti ecc ecc...???
    Il "foreach" è disponibile da Java 5 ed è semplicemente un modo più compatto per iterare su array e oggetti che implementano Iterable.

    http://java.sun.com/developer/JDCTec.../tt0505.html#2
    http://www.developer.com/java/other/article.php/3343771
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    bel problema...stringa-funzione

    Io ho una stringa-funzione di partenza(essa rappresenta una funzione...ex:x^2+3x+e^x..."y=" è sottinteso).Il mio scopo è:sotituendo ad x(variabile) tutti i valori da -1000 a 1000 calcolare la y.
    Come faccio?
    mi date dei suggerimenti tramite codice?
    grz 1000!
    Ps.è una giornata che cerco di trovare il modo d risolvere il problema:ho scomposto la stringa in monomi tramite split quando trovava "+" o "-",ma ora trovo molte difficoltà a staccare la variabile e fare tt il resto!
    preferirei evitare il discorso di parser ecc...altre idee?

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.