Conta numeri in una stringa

di il
10 risposte

Conta numeri in una stringa

Giorno!

Dato che l'ultima volta siete stati utilissimi, ne approfitto di nuovo!

Devo creare un'applicazione che abbia due metodi di classe: boolean percentualeCifre che mi restituisce true se il numero di numero ( pardon gioco di parole ) all'interno di una stringa s sia maggiore o uguale al 50% della lunghezza della stringa, ed un metodo che mi faccia 3 test, con le tre differenti casistiche.

Il mio problema è che quando eseguo il tutto, in console i 3 test non compaiono ( rimane completamente vuota ).

Un indizio/mano?

Grazie mille!
class PercentualeCifre {

public static void main (String[] args) {
		testPercentuale();
	}

public static boolean percentualeCifre (String s) {
	// pre: s!=null && s!=""
	int ContatoreNumeri,i,l;
	char c;
	i = 0;
	ContatoreNumeri = 0;
	l=s.length();
	while (i<l) {
		c = s.charAt(i);
		if ((c>='0') && (c<='9')) {
			ContatoreNumeri++;
		}
	}
	return (ContatoreNumeri>=(l/2));
        }

public static void testPercentuale() {
	/*Stringa senza nessun numero*/
	System.out.println(percentualeCifre("ijuhoahoda") + " = false");
	/*Stringa con numero lettere e numeri uguale*/
	System.out.println(percentualeCifre("78gt65yu") + " = true");
	/*Stringa con più numeri che lettere*/
	System.out.println(percentualeCifre("nj2131321s32") + " = true");	
	}

}

10 Risposte

  • Re: Conta numeri in una stringa

    
    public static void testPercentuale() {
    String s="";
    if(percentualeCifre("ijuhoahoda")) s+="false";
    else if(percentualeCifre("78gt65yu"))s+="true";
    else (percentualeCifre("nj2131321s32")) s+="true"; 
    
    System.out.println(s);
       }
    
  • Re: Conta numeri in una stringa

    Ti ringrazio per l'aiuto, ma continua a darmi la console totalmente vuota.

    Il dubbio mi è venuto perchè in un altro programma simile, il test l'avevo fatto in questa maniera:
    public static void testUguali(){
    
    /*Stringa composta da uguale numero di caratteri maiuscoli e minuscoli*/
    	System.out.println(maiuscoliMinuscoli("a0b1C2H") +" = true ");
    
    /* Stringa composta da zero caratteri maiuscoli e zero caratteri minuscoli */
    	System.out.println(maiuscoliMinuscoli("11") +" = true ");
    
    	/* Stringa composta da un solo carattere */
    	System.out.println(maiuscoliMinuscoli("a") +" = false ");
    
    	/* Stringa composta da caratteri minuscoli e cifre */
    	System.out.println(maiuscoliMinuscoli("abc001") +" = false ");
    
    /*Stringa composta da numeri di caratteri maiuscoli e minuscoli diversi*/
    	System.out.println(maiuscoliMinuscoli("abcM") +" = false ");
    
    }
    
    che è praticamente identica a quella del metodo testPercentuale. In questo caso, tutto veniva visualizzato.
  • Re: Conta numeri in una stringa

    Ma non ti stampa proprio niente??? hai provato a mettere dei System.out ad inizio metodo e a fine per vedere se li stampa?
  • Re: Conta numeri in una stringa

    Il problema è che hai dimenticato di incrementare la variabile "i" nel while e quindi ti rimane un loop infinito!
  • Re: Conta numeri in una stringa

    Della ha scritto:


    il problema è che hai dimenticato di incrementare la variabile "i" nel while e quindi ti rimane un loop infinito!
    Mi sento stupida .__.''
    Era per questo!

    Posto il solito grazie per Della, a questo punto ho scoperto che l'algoritmo ha un problema; contatore numeri mi aumenta sempre, invece che solo quando la condizione dell'if è soddisfatta.
  • Re: Conta numeri in una stringa

    Non ti preoccupare, sono errori che abbiamo fatto tutti noi
    Comunque mi sembrava che l'algoritmo fosse corretto. In che casi ti da errore?
  • Re: Conta numeri in una stringa

    Questo codice:
    class PercentualeCifre {
    
    public static void main (String[] args) {
    		testPercentuale();
    	}
    
    public static boolean percentualeCifre (String s) {
    	// pre: s!=null && s!=""
    	int ContatoreNumeri,i,l;
    	char c;
    	i = 0;
    	ContatoreNumeri = 0;
    	l=s.length();
    	while (i<l) {
    		c = s.charAt(i);
    		if ((c>='0') || (c<='9')) {
    			ContatoreNumeri++;
    		} i++;
    	}
    	System.out.println(ContatoreNumeri);
    	return (ContatoreNumeri>=(l/2));
    	}
    
    public static void testPercentuale() {
    	/*Stringa senza nessun numero*/
    	System.out.println(percentualeCifre("ijuhoahoda") + " = false");
    	/*Stringa con numero lettere e numeri uguale*/
    	System.out.println(percentualeCifre("78gt65yu") + " = true");
    	/*Stringa con più numeri che lettere*/
    	System.out.println(percentualeCifre("nj2131321s32") + " = true");	
    	}
    }
    Mi restituisce in output:

    10
    true = false
    8
    true = true
    12
    true = true

    Come si può notare 10, 8 e 12 è in realtà il numero dei caratteri di TUTTA la stringa, e non solo dei caratteri numerici.
    L'output sarebbe dovuto essere:
    0
    false = false
    4
    true = true
    10
    true = true

    In pratica Contatore numeri mi incrementa sempre e non solo se (c>='0') || (c<='9')
  • Re: Conta numeri in una stringa

    Come non detto; appena scritto ho trovato l'errore.

    Doveva essere (c>='0') && (c<='9'), non ||, giustamente!

    Grazie di nuovo
  • Re: Conta numeri in una stringa

    Si esatto con l'and funziona!! nel primo frammento di codice che avevi postato infatti era corretto!
  • Re: Conta numeri in una stringa

    Chissà per quale astruso motivo l'ho cambiato nel mentre!
Devi accedere o registrarti per scrivere nel forum
10 risposte