Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    47

    Convertire 3a+b in 3*a+b

    Ciao ragazzi ho un problema che non riesco ad implementare.
    Data la seguente Stringa
    String prova = "a+3b-2a+c+4(c)";
    questa deve essere trasformata in a+3*b-2a+c+4*(c).


    Per realizzare ciò sono partita dall'analizzare il sottoproblema senza le parentesi ma non riesco a scrivere l'if nè come aggiungere il segno * tra "k" e "k+1"
    Qualcuno riesce ad aiutarmi per favore?

    codice:
    String prova = "a+3a+b";
    		for (int k=0; k<prova.length(); k++){
    			System.out.println("pr: " + pr);
    			
    			if (prova.charAt(k)== "numero" & pprova.charAt(k) == "lettera"){
    				//sono nel caso 3a 
    			}
    			
    		}

  2. #2
    Ciao, stai sbagliando un po tutto... prima di tutto l'and si definisce con due & (quindi &&) e poi come può un singolo carattere equivalere ad una stringa di più caratteri?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Penso che la parte prova.charAr(k)=="numero" fosse una specie di "pseudocodice" per farci capire la problematica, giusto?

    Comunque non dovrebbe essere difficile fare il passo successivo: crei due metodi (ad esempio isNumeric(char c) , isLiteral(char c)) dove controlli il tipo di carattere che stai leggendo (puoi anche usare metodi già pronti, ma non ti semplificano di molto la vita).

    Quando trovi una corrispondenza, basta concatenare la sottostringa fino a k+1, (prova.substring(0,k+1)) con la stringa "*" e la sottostringa da k+1 in poi (prova.substring(k+1)).

    Comunque nel codice devi fare attenzione all'istruzione che immagino volessi scrivere come "prova.charAt(k+1) è una lettera": per come hai scritto adesso quell'if otterresti un'eccezione a runtime per l'ultimo carattere, per evitarlo devi ciclare fino a prova.length()-1 ...

  4. #4
    Ho ideato questo codice per aiutarti nella comprensione della soluzione al tuo problema

    codice:
        public static void main(String... args) {
    
    
            String riga = "a+3a+b";
            
            //Ciclo per ogni carattere della stringa riga
            for (int i = 0; i < riga.length() ; i++) {
    
    
                /* Questo try serve per un eventuale errore da parte di
                 * ' Integer.valueOf(primo); '
                 * che controlla se il carattere "primo" è un numero intero
                 */
                try {
    
    
                    if ((i + 1) >= riga.length()) break;
    
    
                    String primo = String.valueOf(riga.toCharArray()[i]);
                    String secondo = String.valueOf(riga.toCharArray()[i + 1]);
    
    
                    //Questo va visto come un controllo, se non è un numero genera un eccezione
                    Integer.valueOf(primo);
    
    
                    /* Se il controllo precedente non ha generato errori (quindi è un numero)
                     * controlla se il carattere che segue cioè "secondo" non sia un altro numero
                     */
                    try {
                        
                        //Questo va visto sempre come un controllo
                        Integer.valueOf(secondo);
                        
                    } catch (NumberFormatException nfexception) {
                        
                        /* Se genera un errore (quindi il secondo non è un numero) spezza la riga
                         * per aggiungere il carattere '*' tra le due parti
                         */
                        riga = riga.substring(0, (i + 1) ) + '*' + riga.substring( (i + 1), riga.length());
                        
                    }
    
    
                } catch (Exception exception) {
                    //L'errore generato da ' Integer.valueOf(primo); ' viene ignorato
                }
            }
    
    
            //Stampa del risultato
            System.out.println(riga);
            
        }
    Ho cercato di spiegare ogni cosa ma, se qualcosa non è chiara non esitare a rispondere!

Tag per questa discussione

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.