Un esercizio introduttivo all’uso di Java e delle stringhe di testo. Data una stringa di testo in input utente, si vuole restituire la massima differenza, o meglio la massima distanza, tra le cifre numeriche presenti nella stringa stessa.
Es. a2qwer5ty -> le cifre numeriche sono 2 e 5 e la loro distanza è 5
Es a2e4tyuiop5 -> la distanza tra 2 e 4 è 2 mentre ra 4 e 5 è 7
L’esercizio è un po’ scomodo da risolvere in Java perché ha una classica impostazione da esercizio con funzioni e manipolazione stringhe da C/C++. Java però ha una grande versatilità e basta comprendere che le funzioni a supporto del metodo statico main devono esse dichiarate nella classe Main stessa come pubbliche (anche statiche andrebbe bene) e richiamate dopo aver inizializzato la classe Main stessa.
Superato lo scoglio del come costruire il codice di utilità, l’algoritmo non è difficile: basta trovare una lettera e riciclare dalla lettera stessa in poi per trovarne una seconda, conteggiando i salti e valutando se si sia arrivati ad una lettera finale o se non ce ne sono proprio nella stringa da analizzare.
import java.util.Scanner;
public class Main
{
/***
* Restituisce la distanza massima tra due caratteri numerici
* Es input -> ab2cdef7m return 5
*/
public int differenzaNumerici(String _testo)
{
int maxdist = 0;
int dist = 0;
int numchar = 0;
//caso semplice: non ci sono due numeri
for (int i=0; i < _testo.length(); i++)
{
if (Character.isDigit(_testo.charAt(i)))
numchar++;
}
if (numchar < 2)
return -1;
//caso complesso: ci sono almeno due numeri da conteggiare
//prendo una lettera come riferimento e controllo quelle dopo
for (int i=0; i < _testo.length(); i++)
{
//cerco un numero
if (Character.isDigit(_testo.charAt(i)) )
{
dist = 0;
System.out.println("Ho trovato un numero, vedo il prossimo");
//provo a cercare la successiva lettera
for(int j=i+1; j < _testo.length(); j++)
{
if (Character.isLetter(_testo.charAt(j)))
{
System.out.println("Conteggio una lettera");
dist++;
}
else
{
//ho trovato un numero esco
break;
}
//se sono arrivato alla fine e non trovo una letetra tocca resettare dist
if ( (_testo.length() -1) == j &&
dist > 0)
dist = 0;
}
}
if (dist > maxdist)
maxdist = dist;
}
return maxdist;
}
public static void main(String args[])
{
System.out.println("|------------------------------------------------|");
System.out.println("| Distanza tra caratteri numerici di una stringa |");
System.out.println("|------------------------------------------------|");
System.out.println("Inserisci la stringa da controllare: ");
Scanner in = new Scanner(System.in);
String s = in.nextLine();
Main m = new Main();
System.out.println("La distanza massima è " + m.differenzaNumerici(s));
}
}
Ultima modifica 2 Ottobre 2022