|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
Comunque, senza array mi verrebbe così: Codice:
import java.util.Scanner;
public class ParolaPiuLunga3
{
public static void main (String[] args)
{
Scanner in = new Scanner(System.in);
String parolafinale;
int lunghezzamax = 0;
while (in.hasNext())
{
String n=in.next();
if (n.length()>lunghezzamax)
{
lunghezzamax = n.length();
parolafinale = n;
System.out.println (parolafinale);
}
}
}
}
__________________
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
|
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 455
|
Quote:
L'algoritmo invece è sbagliato per un paio di ragioni: 1) se metti la sysout dentro il ciclo è ovvio che ogni volta che trova una parola piu lunga della precedente stampa la nuova parola. 2) l'array oltre che essere inefficiente è limitante... se ti do un testo di 701 parole che fai? Oltretutto non serve a nulla! Codice:
package tests;
import java.util.Scanner;
public class ParolaLunga {
/** */
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String parolafinale = "";
while (in.hasNext()) {
String n = in.next();
if (n.length() > parolafinale.length()) {
parolafinale = n;
}
}
System.out.println(parolafinale);
}
}
feyd scappo il bimbo piange.... buoni esperimenti ed in bocca al lupo. ciao feyd
__________________
Macbook Air 11" 2.0Ghz - 8GB RAM - 256GB SSD (Mid '12) |
|
|
|
|
|
|
#23 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
Comunque ti ringrazio per l'aiuto!
__________________
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
|
|
|
|
|
|
|
#24 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#25 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#26 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
ma anche se sposto System.out.println fuori dal while mi dice "variable parolafinale might not have been initialized"..e in effetti io l'ho inizializzata dentro al blocco dell'if..
__________________
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
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 455
|
guarda l'esempio che ti ho postato: la variabile è inizializzata fuori dal ciclo while.
Per inciso: le variabili vanno sempre inizializzate. Una delle buone regole di programmazione è quella di lasciare gli oggetti sempre in uno stato consistente. Ciò ha il considerevole vantaggio che meno null hai ingiro minore sarà la probabilità di una NullPointerException a runtime. feyd
__________________
Macbook Air 11" 2.0Ghz - 8GB RAM - 256GB SSD (Mid '12) |
|
|
|
|
|
#29 | |
|
Senior Member
Iscritto dal: Nov 2000
Messaggi: 455
|
Quote:
__________________
Macbook Air 11" 2.0Ghz - 8GB RAM - 256GB SSD (Mid '12) |
|
|
|
|
|
|
#30 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
edit - in alternativa potresti anche lanciare un'eccezione da te creata, una classe NoWordsException; oppure semplicemente una InvalidParameterException. |
|
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Wow, così funziona, grazie!
Poi vorrei chiedervi un'altra cosa..il testo che ci ha fornito la prof aveva la punteggiatura volutamente staccata dalle parole..però se io do in pasto al mio programmino un testo che non sia quello della prof, la punteggiatura mi fa aumentare la lunghezza delle parole e quindi mi falsa tutto..per risolvere come potrei fare? Avevo pensato di cambiare le condizioni dell'if così: Codice:
if (n.length()>lunghezzamax && (n.charAt(n.length()-1) != ',') && (n.charAt(n.length()-1) != '.') && (n.charAt(n.length()-1) != ';') && (n.charAt(n.length()-1) != '!') && (n.charAt(n.length()-1) != '?'))
__________________
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
|
|
|
|
|
|
#32 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
http://java.sun.com/javase/6/docs/ap...Tokenizer.html lo StreamTokenizer ti isola proprio le parole prendendole come tokens di tipo TT_WORD, quindi basta che leggi solo quelle saltando tutti i tokens di tipo diverso. |
||
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
EDIT: a parte che non riesco a usare neanche quella..come si fa a dirgli di "tokenizzarmi" il testo in ingresso ( e non una stringa immessa come parametro esplicito)??
__________________
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
|
|
|
|
|
|
|
#34 | |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
potrebbe essere ok solo se dopo l'ultimo carattere ci fosse un segno di punteggiatura tipo: casa, oppure word. o ancora word: ma se per caso scrive word, e poi word , non andrebbe bene o ancora word ? ecc ecc. poi questo: n.charAt(n.length()-1) != ';' dovrebbe controllare l'ultimo carattere tipo: word-1 ovvero 'r' e word; 'd' invece di splittare controlli carattere per carattere e come incontri un segno di punteggiatura o spaziatura ' ' prendi la word trovata. pseudo code Codice HTML:
wordOK=""
contatore=0
riga="ciao come và? sto bene e tu ? bene ,grazie."
//open "file.txt" for input as #1
//while not eof(1)
//input #1, riga
for i=0 i<len(riga)+1
if mid(riga,i,1)=',' or mid(riga,i,1)='?' or mid(riga.i,1)=' '... ecc ecc then
word=mid(riga,contatore,i-1)
if len(word)>len(wordOK) then wordOK=word
contatore=i+1
endif
next i
//wend
print wordOK
end
riga è tutta una riga del file testo letto catturata da input#1, riga ad ogni while hai una riga del file testo nella variabile riga che ti vai a controllare carattere per carattere questa è una versione funzionante in vb6 Codice HTML:
Dim riga, wordOK, word As String wordOK = "" word = "" contatore = 1 caratteri = 0 riga = "ciao come và? sto bene e tu ? bene ,grazie." 'open "file.txt" for input as #1 'while not eof(1) 'input #1, riga For cc = 1 To Len(riga) caratteri = caratteri + 1 If Mid(riga, cc, 1) = "," Or Mid(riga, cc, 1) = "?" Or Mid(riga, cc, 1) = " " Or Mid(riga, cc, 1) = "." Then word = Mid(riga, contatore, caratteri - 1) If Len(word) > Len(wordOK) Then wordOK = word contatore = cc + 1 caratteri = 0 End If Next cc 'wend ciao Ultima modifica di okay : 05-11-2007 alle 08:59. |
|
|
|
|
|
|
#35 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Codice:
StringTokenizer tokenizer = new StringTokenizer(inputText, " \t\n\r\f.,;:!?"); Quote:
![]() qualunque testo tu abbia suppongo che ce l'avrai in un oggetto String... passalo al primo parametro del costruttore di StringTokenizer, e usa la versione a due parametri, questa cioè: Codice:
public StringTokenizer(String str,
String delim)
|
||
|
|
|
|
|
#36 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
String.charAt(String.length() - 1) restituisce precisamente l'ultimo carattere. |
||
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Ci siamo quasi
Sono arrivata a questo: Codice:
import java.util.Scanner;
import java.util.StringTokenizer;
public class ParolaPiuLunga3a
{
public static void main (String[] args)
{
Scanner in = new Scanner(System.in);
String parolafinale = null;
int lunghezzamax = 0;
while (in.hasNext())
{
String n=in.next();
StringTokenizer tokenizer = new StringTokenizer(n, ".,;:!?\'");
while (tokenizer.hasMoreTokens())
{
String token=tokenizer.nextToken();
if (token.length()>lunghezzamax)
{
lunghezzamax = n.length();
parolafinale = n;
}
}
}
System.out.println ("la parola piu' lunga e' "
+ parolafinale);
}
}
__________________
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
|
|
|
|
|
|
#38 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
correggi questo:
Codice:
if (token.length()>lunghezzamax)
{
lunghezzamax = n.length();
parolafinale = n;
}
Codice:
if (token.length()>lunghezzamax)
{
lunghezzamax = token.length();
parolafinale = token;
}
|
|
|
|
|
|
#39 | |
|
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1192
|
Quote:
posso chiedere un'ultima cosa e poi archivio questo programma? Se ci fossero due parole lunghe uguale cosa succederebbe? mi darebbe come risultato solo la prima trovata?
__________________
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
|
|
|
|
|
|
|
#40 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
nella java 1.4.2 dovevi ancora usare la versione classica del for
__________________
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:38.






















