|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2001
Città: Verona
Messaggi: 757
|
domanda di java...
scusate ma sono molto ignorante in materia...
allora dovrei fare un programma che mi legga una stringa di caratteri, di lunghezza qualsiasi, aiutandomi con il testo sono riuscito a fare questo public static void main (String[] args)throws IOException{ char a[10]; int i=0; for (i=0; i <= a.length -1; i++) a[i]= (char) System.in.read(); for (i=0; i <= a.length -1; i++) System.out.println(a[i]); (sperando di aver postato quello che funge ![]() questo però mi legge una stringa di soli 10 caratteri e me la stampa incolonnata... come posso fare per far si che legga una stringa di numero di caratteri definiti dalla stringa stessa? per favore quando date una risposta tenete a mente che ho appena iniziato a programmare, nn ci capisco una cippa quindi sono ben accette spiegazioni sul funzionamento del programma... ![]() grazie e ciao!
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Allora, innazitutto miglioriamo il tuo programma
![]() Codice:
public static void main (String[] args) { char a[10]; for (int i=0; i <a.length ; i++) a[i]= (char) System.in.read(); for (i=0; i < a.length ; i++) System.out.print(a[i]); quel famoso String[] args che altro non è che un array di argomenti che puoi passare al main... se ad esempio lanci la tua classe con java TuaClasse a b c d nel tuo main troverai un'array di stringhe formato dai quattro elementi "a", "b","c","d" o ancora java TuaClasse tuaStringa oppure java TuaClasse "tuaStringa1" "tuaStringa2" Se invece vuoi usare l'input da tastiera non ti resta che fare un while, con condizione di terminazione l'iserimento di un carattere di fine input, che so un "#" ad esempio.... Per stampare senza andare a capo i caratteri dovresti usare il metodo print() e non println() Ciaoz! non ti resta |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Ti faccio un esempio del ciclo "while" di cui parlava cn73.
Codice:
class SampleRead{ public static void main(String[] arg) { System.out.println("Input: "); boolean lineBreak=false; StringBuffer inString=new StringBuffer(); while(!lineBreak) { try { char c=(char)System.in.read(); if (c=='\n') { lineBreak=true; } else { inString.append(c); } } catch(Exception e) { System.out.println(e); lineBreak=true; } } System.out.println("Output:"); System.out.println(inString); System.out.println("end."); System.exit(0); } } il booleano "lineBreak" lo usiamo per far sapere al ciclo "while(condition)" fino a quando dovrà ripetersi. StringBuffer è più o meno come uno String e in più permette di costruire la stringa "appendendo char". Il ciclo "while" si ripete finchè lineBreak è "false" (il punto esclamativo "inverte" il valore di lineBreak, "while(!lineBreak)" è uguale a "while(lineBreak==false)"). Il blocco "try {...} catch()" intercette le eccezioni generate all'interno di esso", è come la clausola "throws" ma permette la gestione dell'eccezione (cosa fare quando qualcosa non va). Il blocco "if" controlla se il carattere inserito è un'interruzione di linea (il simbolo '\n'): se è stato premuto invio imposta "lineBreak" a true e il ciclo "while" non verrà più eseguito. Se è stato premuto un altro tasto allora "appendiamo" al nostro StringBuffer "c". Il ciclo si ripete finchè non incontra un "break line". Una volta completato stampa l'oggetto inString. Se ti sono sembrato troppo elementare nella spiegazione è perchè sono un dilettante puro ![]() Ciao. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
PGI...mi pare di capire che la condizione di terminazione si ha con un INVIO...quel "\n" siamo sicuri funzioni?? il "carattere" invio viene codificato come CHR(10) (linefeed) + CHR(13) (carriage return), un po' come quando scriviamo a macchina,per andare a capo si deve portare prima il tamburo a fine riga e poi si gira per spostarsi sotto...
|
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Ma cerchiamo proprio il pelo nell'uovo!
![]() Ma non hai torto. Il ciclo funziona, il primitivo char '\n' indica il separatore di linea nei sistemi UNIX, più correttamente avremmo dovuto operare un confronto con System.getProperty("line.separator").charAt(0). La condizione if migliore allora sarebbe: if (c==System.getProperty("line.separator").charAt(0)) {...} ma per quello che dobbiamo fare nell'esempio esempio equivale a if (c=='\n') oppure if (c=='\r'). Il tasto "invio" corrisponde ad una sequenza di due caratteri '\r' e di seguito '\n' (ritorno carrello e nuova linea). Nel nostro StringBuffer includiamo anche il '\r' (perchè il ciclo si interrompe quando incontra il successivo '\n'). Per abitudine utilizzo nella parzializzazione di stringhe il solo carattere '\n' ma in effetti è, in certi casi, una pessima abitudine. Ciao. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Ottima spigazione
![]() ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jun 2001
Città: Verona
Messaggi: 757
|
grazie mille, adesso mi metto giù e provo a vedere di capire da me stesso come funge il tutto e provo a rifarlo (se no come imparo)
a porposito ho il jbuldier 4 della borland... come funziona? non c'è qualcosa di + semplice, che ne so come il c++ del dos con i suoi solo 4 menù con 5-6 argomenti ciascuno?... adeso vado avanti con edit... ![]() grazie mille a buon rendere!
__________________
![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:19.