Somma di caratteri numerici presenti in una stringa

di il
9 risposte

Somma di caratteri numerici presenti in una stringa

Ciao a tutti! Ringrazio anticipatamente chiunque voglia aiutarmi nel risolvere questo esercizio, sono alle prime armi con java e purtroppo non riesco a risolvere questo problema...
L'esercizio chiede di: Data una stringa non nulla, calcolare la somma dei numeri che appaiono nella stringa, dove per “numero” si intende una sequenza massimale di caratteri numerici.
Io sono riuscito solo a sommare i caratteri numerici ma non se si presentano in una sequenza, ad esempio la stringa: "cinque5sei66" dovrebbe restituire 71, invece a me risulta 17.


Ecco il mio codice:

public class SommaCaratteriNumerici{

	public static void main(String Args[]){
		
	  testSommaCaratteriNumerici();	
		
		
	}

	
	public static int sommaCaratteriNumerici(String s){
		
		int contaSomma = 0;
		int numero = 0;
		char c;
		
		for (int i=0; i< s.length(); i++){
			
			
			c = s.charAt(i);
			
			
			if (c >= '0' && c <= '9'){
				
				
				numero = c - '0';
				
					
				
			}
			
			else{
				
				numero = 0;
			
				
			}
			
         
			
			contaSomma = contaSomma + numero;
			
				
			
		
		}
		
		return contaSomma;
		
	}
	
	

	public static void testSommaCaratteriNumerici(){
		
		System.out.println("\"SVEGLIA!1!1!11!@@2\" [15] -----> "+sommaCaratteriNumerici("SVEGLIA!1!1!11!@@2"));
		System.out.println("\"cinque5sei66\" [71] -----> "+sommaCaratteriNumerici("cinque5sei66"));
			
	}
	
	
	
	
	
	
	
	
}

9 Risposte

  • Re: Somma di caratteri numerici presenti in una stringa

    Spice ha scritto:


    ad esempio la stringa: "cinque5sei66" dovrebbe restituire 71, invece a me risulta 17.
    Guarda che con il codice che hai scritto, stai banalmente sommando i valori di tutte le singole cifre decimali (e non è quello che ti è stato chiesto di fare).

    In "cinque5sei66" fai 5+6+6 = 17

    Devi individuare le sequenze di valori numerici, nell'esempio "5" e "66", parsarle come numeri interi per ottenere 5 e 66, quindi la somma è appunto 71.
    Si può fare questo in svariati modi.
  • Re: Somma di caratteri numerici presenti in una stringa

    andbin ha scritto:


    Spice ha scritto:


    ad esempio la stringa: "cinque5sei66" dovrebbe restituire 71, invece a me risulta 17.
    Guarda che con il codice che hai scritto, stai banalmente sommando i valori di tutte le singole cifre decimali (e non è quello che ti è stato chiesto di fare).

    In "cinque5sei66" fai 5+6+6 = 17

    Devi individuare le sequenze di valori numerici, nell'esempio "5" e "66", parsarle come numeri interi per ottenere 5 e 66, quindi la somma è appunto 71.
    Si può fare questo in svariati modi.
    Lo so ma purtroppo non mi viene in mente un modo per individuare queste sequenze
  • Re: Somma di caratteri numerici presenti in una stringa

    Spice ha scritto:


    Lo so ma purtroppo non mi viene in mente un modo per individuare queste sequenze
    Lo si può fare sfruttando le "espressioni regolari" ma non so se/quanto sai sull'argomento (né se ti è permesso usarle oppure no ).
    Altrimenti ci sono vari approcci più basilari. Del tipo: un ciclo principale per scansionare i caratteri uno per uno, appena trovi una cifra decimale fai un ciclo interno per verificare fino a dove si estende la sequenza numerica.
    Altro approccio è usare una minimale macchina "a stati" per trovare dove inizia e dove finisce una sequenza numerica.
  • Re: Somma di caratteri numerici presenti in una stringa

    Non conosco le espressioni regolari non le abbiamo ancora fatte
    Proverò con l'approccio basilare!
  • Re: Somma di caratteri numerici presenti in una stringa

    Niente non riesco ad impostare la condizione del ciclo interno che verifica se il carattere successivo è un numero, qualche esempio su come si potrebbe fare?
  • Re: Somma di caratteri numerici presenti in una stringa

    Spice ha scritto:


    Niente non riesco ad impostare la condizione del ciclo interno che verifica se il carattere successivo è un numero, qualche esempio su come si potrebbe fare?
    Nel ciclo principale sei ad un indice i il cui carattere hai verificato che è una cifra decimale. Bene, un altro ciclo uguale solo che parte con j=i+1 . Appena trovi un carattere non cifra decimale puoi terminare questo ciclo. Puoi o conteggiare la lunghezza oppure tenere l'indice del carattere non cifra decimale (che guarda caso è proprio appropriato per un substring)
  • Re: Somma di caratteri numerici presenti in una stringa

    Ti ringrazio ho fatto come hai detto ma purtroppo continuo a sbagliare e non so come uscirne... boh è l'unico esercizio che ci è stato assegnato così quindi non ho niente a cui ricollegarmi
  • Re: Somma di caratteri numerici presenti in una stringa

    Spice ha scritto:


    Ti ringrazio ho fatto come hai detto ma purtroppo continuo a sbagliare e non so come uscirne... boh è l'unico esercizio che ci è stato assegnato così quindi non ho niente a cui ricollegarmi
    Ok, spiegazione più estesa per ottenere l'indice escluso (ovvero quello fuori dalla sequenza numerica) utile per il substring.

    Hai trovato un carattere all'indice i che è una cifra decimale. Definisci una variabile j fuori (prima) del ciclo che ti sto per dire, servirà per dopo.
    Poi fai un ciclo con inizializzazione j=i+1 per tutta la lunghezza possibile e incrementando come solito per +1. All'interno: se il carattere j-esimo non è una cifra decimale, fai un break.

    Terminato il ciclo (per il break o per la condizione cioè per fine stringa), quel indice j è valido per fare un substring da i (incluso) a j (escluso). Vedi appunto substring di String.
    Chiaramente devi poi aggiornare i in modo che sia coerente, cioè che riparta dopo la sequenza numerica. Altrimenti vedresti più pezzi della stessa sequenza!
  • Re: Somma di caratteri numerici presenti in una stringa

    Grazie infinite ci sono riuscito!! Sei stato gentilissimo
Devi accedere o registrarti per scrivere nel forum
9 risposte