|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
[JAVA]trovare la parola più lunga..aiuto!
Ciao!
Ho iniziato un mesetto fa all'uni a studiare questo linguaggio, ma a dire il vero mi sto abbastanza incasinando la prof ci ha dato questo esercizio: dato un testo in ingresso, individuare qual è la parola più lunga. Ecco, non riesco a venircene fuori..ho pensato di fare così: -ricevo il testo in ingresso -mi creo un array di tipo String, prendo ogni parola del testo e la inserisco singolarmente nell'array -per confrontarle..boh, a noi ha introdotto i metodi compareTo e equals..io avevo pensato di usare il compareTo in questo modo: se la parola in a[i] viene prima di quella in a[i+1], allora sostituisci a[i] con a[i+1] e così via in un ciclo for.. Secondo voi è un'idea stupida? Più in generale, avete qualche consiglio da darmi per risolvere questi problemini? fino al mese scorso non sapevo neanche cosa fosse la programmazione, e adesso mi trovo un po' in difficoltà..sto continuando a provare a fare esercizi di questo genere, ma non me ne riesce neanche uno Ringrazio chi avrà voglia di aiutarmi..
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1159
|
Edit...
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2001
Città: pisa
Messaggi: 70
|
Ciao, quando programmi in java tieni sempre a portata di mano la documentazione.
Qui trovi tutto quello che ti serve per risolvere il problema. http://java.sun.com/j2se/1.4.2/docs/...ng/String.html leggi come funziona il compareTo e capirai perchè la tua soluzione non è conveniente. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
EDIT: forse dovrei usare il metodo length()?
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
lenght() ti restituisce la lunghezza della stringa, e quello che ti serve
__________________
http://www.tevigroup.it/ |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Inoltre, se tenere un array o meno, dipende da cosa usi per ottenere le singole parole. Se hai una unica stringa in input, devi chiaramente "spezzarla" per ottenere le singole parole. Come fare questo ... dipende da cosa vuoi usare: StringTokenizer? Scanner? o una espressione regolare ad esempio usando split()? Prova ad esempio: Codice:
StringTokenizer st = new StringTokenizer (" ciao prova delle parole ");
while (st.hasMoreTokens ())
System.out.println (st.nextToken ());
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 | |||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
una cosa del genere direi: Codice:
String longest(String inputText)
{
String[] splittedText = inputText.split(" ");
String result = null;
int maximumLength = 0;
for (String word : splittedText)
{
if (word.length() > maximumLength)
{
maximumLength = word.length();
result = word;
}
}
return result;
}
Quote:
|
|||
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 455
|
tieni in una variabile la parola piu lunga trovata fino ad ora.
tokenizzi come suggerito e per ogni token ne confronti la lunghezza con la lunghezza della parola correntemente salvata. se è maggiore quella è la parola temporaneamente piu lunga. quando hai finito il testo in ingresso nella variabile c'è la parola piu lunga. come gli altri ti suggerisco la documentazione java. feyd
__________________
Macbook Air 11" 2.0Ghz - 8GB RAM - 256GB SSD (Mid '12) |
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
Codice:
Scanner in = new Scanner(System.in);
while (in.hasNext())
{
String n=in.next();
System.out.println (n);
}
Quote:
Ah, un'altra cosa..il return alla fine del tuo pezzettino di codice vuol dire che mi dovrei creare un nuovo metodo? Scusa, magari sono domande stupide, ma mi sta andando in fusione il cervello
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
||
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2007
Città: Milano
Messaggi: 413
|
Quote:
Comunque, il ciclo for impostato in quel modo come funziona? fa una sorta di for each? non sapevo che in java si potesse fare in questo modo |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Codice:
if (word.length() > maximumLength)
{
maximumLength = word.length();
result = word;
}
Ma questo: Codice:
for (String word : splittedText)
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
#12 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
nel codice infatti non mi sono tenuto l'indice della parola più lunga ma direttamente la parola. ti spiego come funziona il codice: con la chiamata a split divide il testo in parole e le mette in un array di stringhe (non so manco se " " va bene come espressione regolare, comunque se tu riesci già a dividere il testo con lo Scanner tanto meglio lascia perdere split Quote:
|
||
|
|
|
|
|
#13 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
significa praticamente questo: Codice:
for (int i = 0; i < splittedText.length; i++)
{
String word = splittedText[i];
...
|
||
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 455
|
Quote:
http://java.sun.com/j2se/1.5.0/docs/...e/foreach.html vista la domanda deduco che l'esercizio avesse il doppio scopo di insegnare un po' di algoritmica elementare e le basi di java. Oltre alla documentazione online ti suggerisco anche di affiancare alla tastiera un buon libro cartaceo su java. Ti assicuro che ne sarai ampiamente ripagato. feyd
__________________
Macbook Air 11" 2.0Ghz - 8GB RAM - 256GB SSD (Mid '12) |
|
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 455
|
avevo comunque un 50% di possibilità di prenderci senza leggere la firma... ho tentato... la statistica era dalla mia parte
__________________
Macbook Air 11" 2.0Ghz - 8GB RAM - 256GB SSD (Mid '12) |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
e io che credevo foste tutti interessati a questo complessissimo algoritmo
Dunque..dopo due ore di Codice:
import java.util.Scanner;
public class ParolaPiuLunga2
{
public static void main (String[] args)
{
Scanner in = new Scanner(System.in);
String[] arrayParole = new String[700];
String parolafinale;
int lunghezzamax = 0;
while (in.hasNext())
{
String n=in.next();
int i= 0;
arrayParole[i] = n;
if (arrayParole[i].length()>lunghezzamax)
{
lunghezzamax = arrayParole[i].length();
parolafinale = arrayParole[i];
System.out.println (parolafinale);
}
i++;
}
}
}
), però quando lo mando in esecuzione (java ParolaPiuLunga2 < Manzoni.txt) mi dà come risultato:Quel volge mezzogiorno restringersi e non capisco dove sono gli errori.. PS. Manzoni.txt è: Quel ramo del lago di Como , che volge a mezzogiorno , tra due catene non interrotte di monti , tutto a seni e a golfi , a seconda dello sporgere e del rientrare di quelli , vien , quasi a un tratto , a restringersi , e a prender corso e figura di fiume , tra un promontorio a destra , e un' ampia costiera dall' altra parte .
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
__________________
blue_blue: nickname proprio di persona, femminile, singolare "Wait, before you close the curtain/There’s still another game to play/And life is beautiful that way"(Beautiful that way, Noa & Nicola Piovani) Fiore, sei un mito
|
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
L'array di per sé non servirebbe nemmeno, come è già stato detto basta avere 2 variabili che man mano tengono: la lunghezza e la stringa più lunga.
Comunque l'array lo usi male perché usi una variabile 'i' come indice che è locale al ciclo, pertanto è sempre 0.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Sep 1999
Città: Pistoia
Messaggi: 618
|
basta usare uno string tokenizer e il .lenght()... occhio se la stringa in input è lunga e contiene degli '\n' che puoi sostituire con un replaceAll()
__________________
CPU: AMD Phenom II X3 720 BE - MOBO: Asrock AS790GXH/128 - RAM: 2x 2GB Kingston 800 MHz - VGA: Powercolor Ati Radeon HD 4850 512 MB GDDR4 - HD: 320 GB Hitachi Sata II - PSU: Corsair 650VXEU - CASE: Cooler Master Cavalier Netbook Asus 1000HE |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:13.












)








