|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
[java] stampare posizioni vocali "i"
ciao a tutti!
ho realizzato questo programma che mi consente di cercare le vocali "i" all'interno di una stringa: Codice:
System.out.print("Le posizioni della vocale i:"); for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == 'i') { System.out.print((i)); }} Es, se digito: Mario Rossi Il risultato deve essere questo: 3,10 Come posso fare? Ciao e grazie |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Codice:
System.out.println(i+","); Se concateni un intero ad una stringa (come nel tuo caso) l'intero viene convertito direttamente ad una stringa ![]() ![]()
__________________
![]() Ultima modifica di luxorl : 05-07-2009 alle 18:32. |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
Il problema è che in questo modo viene stampata anche una seconda virgola:
Le posizioni della vocale i:3,10, |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
![]() Codice:
for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == 'i') { System.out.print((i)); if(i == (line.length()-1)) break; System.out.print(","); } }
__________________
![]() |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Sep 2008
Messaggi: 91
|
Ciao
Grazie, funziona! Però non ho capito che cosa fa questa porzione di codice: Codice:
if(i == (line.length()-1)) break; System.out.print(","); |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
SE i è arrivato all'ultimo carattere della stringa ESCI DAL CICLO FOR (break) Stampa , In pratica ad ogni ciclo controlla se è alla fine della stringa, se è così esce immediatamente senza stampare la virgola se invece non è alla fine stampa la virgola ![]() break serve per uscire forzatamente dai cicli in qualsiasi momento.
__________________
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2001
Città: Firenze
Messaggi: 585
|
Quote:
Bisognerebbe, per ogni lettera 'i' trovata, innescare un altro controllo per percorrere il resto della stringa fino alla fine e vedere se effettivamente era l'ultima.
__________________
http://www.gnu.org/philosophy/no-wor...hments.it.html http://gprime.net/flash/postingandyou.php [1510 kB] |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
![]() ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Codice:
// char 'i' @ indexes: 1, 8, 16, 21 String input = "Siamo qui con voi a giocare"; // raccolgo indici come String in una lista List<String> indexes = new ArrayList<String>(); for (int i = 0; i < input.length(); i++) if (line.charAt(i) == 'i') indexes.add(String.valueOf(i)); // stampo la stringa degli indici if (indexes.size() > 0) { // stampo il primo e lo rimuovo dalla lista: System.out.println(indexes.remove(0)) // stampo tutti gli altri separati dal carattere ',' for (String s : indexes) System.out.println(", "+ s); }
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Codice:
String line = "Ilaro RIssi"; boolean ultimaI = true; System.out.print("Le posizioni della vocale i:"); for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == 'i' || line.charAt(i) =='I') { System.out.print((i)); for (int j = i+1; j < line.length(); j++) { if (line.charAt(j) == 'i' || line.charAt(j) =='I') ultimaI = false; } if(ultimaI == true) break; System.out.print(","); ultimaI = true; } } Ho inserito un ciclo interno che controlla se la "i" trovata è l'ultima in caso positivo interrompe tutto, se no stampa una virgola. Inoltre ho corretto la condizione dentro l'if di verifica se il char controllato è una "i"... perché non controllava le "I" maiuscole ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
ma non sarebbe + leggibile con qualcosa del genere?
Codice:
System.out.print("Le posizioni della vocale i:"); string result = ""; for (int i = 0; i < line.length(); i++) { if (line.charAt(i) == 'i') { result += line.charAt(i) + ", "; }} if (result.length > 0) System.out.print(result.substring(0, result.length - 2);
__________________
![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2001
Città: Firenze
Messaggi: 585
|
Quote:
__________________
http://www.gnu.org/philosophy/no-wor...hments.it.html http://gprime.net/flash/postingandyou.php [1510 kB] |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Codice:
result += line.charAt(i) + ", "; Codice:
result += String.valueOf(i) + ", "; ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Con la mia soluzione nel peggiore dei casi si ha complessità quadrata ![]() Qui il for resta uno solo ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:05.