View Full Version : Esercizio java. Mi aiutate a spiegarlo?
Frenky-90
05-01-2012, 11:33
Ciao Ragazzi sto seguendo un corso java via Web. Sono arrivato al punto delle esercitazioni. Questo è l'esercizio
Basandosi sulla dispensa "Ricevere dati da tastiera" e sapendo che l'affermazione
int valore = Integer.parseInt("1977");
restituisce un intero di valore 1977. Scrivere un programma che chiede all'utente il suo anno di nascita e restituisce la sua età.
Questo è il programma compilato.
import javax.swing.JOptionPane;
import java.util.Calendar;
public class CalcolaEta {
public static void main(String[] args){
String annoInput = JOptionPane.showInputDialog("inserisci il tuo anno di nascita:");
int eta = calcolaEta(annoInput);
String msg = "La tua età è di "+eta+" anni";
JOptionPane.showMessageDialog(null, msg);
}
public static int calcolaEta(String anno){
int annoNascita = Integer.parseInt(anno);
Calendar oggi = Calendar.getInstance();
int annoCorrente = oggi.get(Calendar.YEAR);
if(annoCorrente>=annoNascita){
return annoCorrente - annoNascita;
}
else {return 0;}
}
}
Fino alla prima parte di codice ci sto, perchè è il metodo joptinpane per crearmi una finestra per ricevere dati. E' la seconda parte del codice che non mi è proprio chiara. Qualcuno puo aiutarmi ad analizzarla?
Grazie.
clockover
05-01-2012, 12:07
public static int calcolaEta(String anno){
//"trasforma" la stringa anno in un numero intero
int annoNascita = Integer.parseInt(anno);
//Oggetto calendario
Calendar oggi = Calendar.getInstance();
//restituisce l'anno corrente
int annoCorrente = oggi.get(Calendar.YEAR);
//se l'anno corrente è maggiore uguale all'anno di nascita
if(annoCorrente>=annoNascita){
//ti stituisce la loro differenza, quindi l'età
return annoCorrente - annoNascita;
}
//altrimenti ritorna 0
else {return 0;}
Frenky-90
05-01-2012, 13:21
E' normale che io non abbia mai potuto sapere inserire questi due comandi?
Calendar oggi = Calendar.getInstance();
int annoCorrente = oggi.get(Calendar.YEAR);
Un'altra cosa questa è una super classe che poi dovra contenere sotto classi Leone, lupo gatto cane. A che cosa serve il this.??
public class Animale {
private boolean domestico;
private int numero zampe;
private String famiglia;
public animale (boolean domestico, int numero zampe, String famiglia); {
This.domestico = domestico;
this.numerozampe = numeroZampe;
this.famiglia = famiglia;
P.s ce ne vuole di tempo per entrare nella logica del linguaggio java vero?
Grazie.. userò questo thread per postare altri dubbi..
Grazie dell aiuto.
E' normale che io non abbia mai potuto sapere inserire questi due comandi?
Calendar oggi = Calendar.getInstance();
int annoCorrente = oggi.get(Calendar.YEAR);
E' normale. Imparerai a conoscere classi della libreria standard un po' alla volta, quando ti serviranno.
Un'altra cosa questa è una super classe che poi dovra contenere sotto classi Leone, lupo gatto cane. A che cosa serve il this.??
In questo caso stai dicendo che quel famiglia, è riferito al membro della classe Animale(perché siamo dentro la classe animale).
public class Animale {
private boolean domestico;
private int numero zampe;
private String famiglia;
public animale (boolean domestico, int numero zampe, String famiglia); {
This.domestico = domestico;
this.numerozampe = numeroZampe;
this.famiglia = famiglia;
P.s ce ne vuole di tempo per entrare nella logica del linguaggio java vero?
Se è il tuo primo linguaggio probabilmente sì.
Grazie.. userò questo thread per postare altri dubbi..
Grazie dell aiuto.
Risposte ciccione.
Frenky-90
05-01-2012, 20:53
Ok chiaro. Grazie.
Tornerò con altri esercizi.:)
Frenky-90
06-01-2012, 13:01
//Avvio di Notepad
class StartNotepad {
public static void main(String args[]) {
Runtime rt = Runtime.getRuntime();
Process proc;
try {
proc = rt.exec("notepad");
proc.waitFor();
}
catch (Exception e) {
System.out.println("notepad è un comando sconosciuto.");
}
}
}
Può essere spiegato?
Qui c'è il blocco try catch, a che cosa serve qui?
Avviandolo da prompt, mi apre il blocco note.
L'istruzione proc = rt.exec("notepad"); provoca l'esecuzione del programma notepad (che è appunto il blocco note di win).
L'istruzione proc.waitFor(); è usata per mettere in attesa il thread corrente della terminazione del processo prima avviato (il notepad). Il try-catch serve ad intercettare eccezioni di run-time. Ad esempio se il notepad non viene trovato o, per qualche motivo, non è possibile lanciarlo, ecc...
P.S. Il programma passato per l'esecuzione (in questo caso notepad) viene cercato nel tuo PATH di sistema.
Frenky-90
07-01-2012, 12:29
L'istruzione proc = rt.exec("notepad"); provoca l'esecuzione del programma notepad (che è appunto il blocco note di win).
L'istruzione proc.waitFor(); è usata per mettere in attesa il thread corrente della terminazione del processo prima avviato (il notepad). Il try-catch serve ad intercettare eccezioni di run-time. Ad esempio se il notepad non viene trovato o, per qualche motivo, non è possibile lanciarlo, ecc...
P.S. Il programma passato per l'esecuzione (in questo caso notepad) viene cercato nel tuo PATH di sistema.
grazie. :)
e se io invece del notepad avessi voluto avviare una qualsiasi altra applicazione di windows come sarebbe dovuta essere la sintassi?
Grazie mille.
La sintassi è la stessa, cambia solo ciò che scrivi tra parentesi:
proc = rt.exec("eseguibileCheVuoiAvviare");
Se l'eseguibile è sito in una cartella inclusa nel path di sistema ti basta il nome dell'eseguibile. Diversamente, devi specificare il percorso (relativo o assoluto) dell'applicazione quindi ad es. C:\Programmi\miaCartella\mioprog.exe.
Frenky-90
07-01-2012, 21:15
cioè in proc = rt.exec("C:\Program Files\Speccy.exe") ??
Così?
cioè in proc = rt.exec("C:\Program Files\Speccy.exe") ??
Così?
No, così:
proc = rt.exec("C:\\Program Files\\Speccy.exe");
Frenky-90
08-01-2012, 11:26
Ho provato ma se per esempio metto questa estensione, mi fà lo javac, ma allo java mi dice speccy un comando sconosciuto. Entra in atto il try Catch xke non riesce a trovare l'exe.
clockover
08-01-2012, 12:51
Ho provato ma se per esempio metto questa estensione, mi fà lo javac, ma allo java mi dice speccy un comando sconosciuto. Entra in atto il try Catch xke non riesce a trovare l'exe.
Il tuo "ti fa lo javac" vuol dire che in fase di compilazione non ci sono errori, quindi la sintassi è corretta.
Il tuo errore è dunque a runtime e l'eseguibile da te indicato non c'è
Frenky-90
17-01-2012, 11:19
ESERCITAZIONI PER L’ARGOMENTO “ECCEZIONI”
2 Scrivere un programma che, dato il nome di un file, scrive su questo file il testo che l'utente digita a console, quindi rilegge il contenuto e lo stampa sull'output.
Soluzione
import java.io.*;
/**
* Dato il nome di un file, scrive su questo file il testo che l'utente digita
* a console, quindi rilegge il contenuto e lo stampa sull'output
*/
public class SimpleEditor {
/**
* Scrive su file il contenuto del buffered reader fino a che non trova una riga vuota
*/
static void scriviSuFile(BufferedReader input, String file) throws FileNotFoundException, IOException {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
String line = null;
while(!(line = input.readLine()).equals("")) {
bw.write(line);
bw.newLine();
}
} finally {
if(bw != null)
try {
bw.close(); // questo implica la flush
} catch(Exception e) {}
}
}
/**
* Stampa sull'output fornito il contenuto del file
*/
static void stampaSuOutput(PrintStream out, String file) throws FileNotFoundException, IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = null;
while((line = br.readLine()) != null) {
out.println(line);
}
} finally {
if(br != null)
try {
br.close();
} catch(Exception e) {}
}
}
public static void main(String[] args) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Indica il nome del file di testo da creare: ");
String file = in.readLine();
System.out.println("Ora digita il contenuto del file di testo. \n" +
"Premi due volte invio per terminare");
scriviSuFile(in, file);
System.out.println("Il file e' stato scritto. Ora lo rileggo e ti mostro il contenuto");
stampaSuOutput(System.out, file);
} catch(FileNotFoundException fnfe) {
System.out.println("Non ho trovato il file specificato");
fnfe.printStackTrace();
} catch(IOException e) {
System.out.println("Errore di io generico riscontrato durante l'operazione.");
e.printStackTrace();
}
}
}
Riuscite a capirlo?
clockover
17-01-2012, 12:08
Potresti indentare il codice per piacere?
Codice indentato
public static void main(String args[]){
System.out.println("Ciao");
}
Codice non indentato
public static void main(String args[]){
System.out.println("Ciao");
}
ci aiuti a capire meglio quello che dobbiamo capire :)
Frenky-90
17-01-2012, 13:37
Il fatto è che non lo sò.
Questa è la soluzione dell esercizio proposta da loro.
Il tema è questo
Scrivere un programma che, dato il nome di un file, scrive su questo file il testo che l'utente digita a console, quindi rilegge il contenuto e lo stampa sull'output
Riusciresti comunque a fare qualcosa?:)
banryu79
17-01-2012, 14:36
Potresti indentare il codice per piacere?
Il fatto è che non lo sò.
Non riesci ad identare del codice? Voilà...
import java.io.*;
/**
* Dato il nome di un file, scrive su questo file il testo che l'utente digita
* a console, quindi rilegge il contenuto e lo stampa sull'output
*/
public class SimpleEditor {
/**
* Scrive su file il contenuto del buffered reader fino a che non trova
* una riga vuota
*/
static void scriviSuFile(BufferedReader input, String file)
throws FileNotFoundException, IOException {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
String line = null;
while (!(line = input.readLine()).equals("")) {
bw.write(line);
bw.newLine();
}
} finally {
if (bw != null) try {
bw.close(); // questo implica la flush
} catch (Exception e) {}
}
}
/**
* Stampa sull'output fornito il contenuto del file
*/
static void stampaSuOutput(PrintStream out, String file)
throws FileNotFoundException, IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null) {
out.println(line);
}
} finally {
if (br != null) try {
br.close();
} catch (Exception e) {}
}
}
public static void main(String[] args) {
try {
BufferedReader in =
new BufferedReader(newInputStreamReader(System.in));
System.out.println("Indica il nome del file di testo da creare: ");
String file = in.readLine();
System.out.println("Ora digita il contenuto del file di testo." +
"\nPremi due volte invio per terminare");
scriviSuFile(in, file);
System.out.println("Il file e' stato scritto. " +
"Ora lo rileggo e ti mostro il contenuto");
stampaSuOutput(System.out, file);
} catch (FileNotFoundException fnfe) {
System.out.println("Non ho trovato il file specificato");
fnfe.printStackTrace();
} catch (IOException e) {
System.out.println("Errore di io generico riscontrato " +
"durante l'operazione.");
e.printStackTrace();
}
}
}
Frenky-90
17-01-2012, 16:10
aaaa ok ecco cos'è l'indentazione. !! Scusatemi , ma visto che sono ipernuovo non capivo che dovevo scalare il testo nel blocco note.
Nel blocco note è indentato, solo che con il copia incolla si è levato.
Sorry.
Potreste spigarmi? Sono ad un punto in java, dove vengono spiegate le eccezioni, con try catch, throw e finally, ma non troppo le ho intese nella teoria, o meglio, il blocco try catc in se per se si, ma throw finally no!
Spero che con gli esercizi mi entri bene i mente. Spero anche di confidare nel vostro aiuto.
Grazie
clockover
17-01-2012, 16:13
Potresti spiegarmi cosa hai fatto?
Ha indentato il codice
Frenky-90
17-01-2012, 16:18
Ha indentato il codice
si si..
Ho aggiornato il post sopra, xke ci sono arrivato in ritardo:p
clockover
17-01-2012, 16:25
quando entri in un blocco try vuol dire che stai eseguendo un pezzo di codice che potrebbe fallire e bloccare il tuo programma (in parole proprio spicciole) quindi
try{
fai qualcosa che potrebbe fallire
}catch(Eccezione){
fai qualcosa se fallisce per tentare di recuperare o stampa un messaggio di avviso, ecc
Eccezione è il tipo di errore che l'operazione "rischiosa" scatena in caso di fallimento.
Ad esempio IOException è un eccezione che può verificarsi scrivendo su un file. Magari un file protetto da scrittura provi a scriverci ma la scrittura fallisce.
}finally{
qui dentro ci finisci sempre, o fallisci o non fallisci
}
tutto in poche parole... comunque le eccezioni sono molto importanti... fai da solo delle prove più semplici per capire cosa succede, ad esempio prova a inserire delle System.out.println("qualcosa") nei blocchi catch e finally
banryu79
17-01-2012, 16:39
@ Frenky-90:
Mastichi l'inglese? Se sì, ti consiglio caldamente la lettura di questa trail dei Java Tutorial nel sito della Oracle:
Java Tutorial -> Lesson: Exceptions (http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html)
Frenky-90
18-01-2012, 09:17
S un pochetto si.
Ho due slide che mi ha fornito il corso in cui si parla di eccezioni e Threads, però sai vengono applicati a piccoli esempi.
Se mi danno un esercizio con questo tema: Scrivere un programma che, dato il nome di un file, scrive su questo file il testo che l'utente digita a console, quindi rilegge il contenuto e lo stampa sull'output, non avrei mai saputo scrivere tutto quel patatrack che ho postato prima.
Come mai?
Rileggendo la slide ho visto che
-Le eccezioni sono oggetti, quindi vengono raggruppate, tipo definite in java.IO, dove sono presenti errori come FileNotFoundException e IOExceptio.
-il throws serve ad indicare che viene ignorata quella eccezione e si passa la gestione ad n altro metodo.
- Il blocco finally deve essere sempre sempre inserito dopo Try-Catch???
-throw crea eccezioni...trhow new
Ora però è possibile spiegare i blocchi di esercizio come fatto con gli altri esercizi?
import java.io.*;
public class SimpleEditor
static void scriviSuFile(BufferedReader input, String file)
throws FileNotFoundException, IOException {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(file));
String line = null;
while (!(line = input.readLine()).equals("")) {
bw.write(line);
bw.newLine();
}
} finally {
if (bw != null) try {
bw.close(); // questo implica la flush
} catch (Exception e) {}
}
}
static void stampaSuOutput(PrintStream out, String file)
throws FileNotFoundException, IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null) {
out.println(line);
}
} finally {
if (br != null) try {
br.close();
} catch (Exception e) {}
}
}
public static void main(String[] args) {
try {
BufferedReader in =
new BufferedReader(newInputStreamReader(System.in));
System.out.println("Indica il nome del file di testo da creare: ");
String file = in.readLine();
System.out.println("Ora digita il contenuto del file di testo." +
"\nPremi due volte invio per terminare");
scriviSuFile(in, file);
System.out.println("Il file e' stato scritto. " +
"Ora lo rileggo e ti mostro il contenuto");
stampaSuOutput(System.out, file);
} catch (FileNotFoundException fnfe) {
System.out.println("Non ho trovato il file specificato");
fnfe.printStackTrace();
} catch (IOException e) {
System.out.println("Errore di io generico riscontrato " +
"durante l'operazione.");
e.printStackTrace();
}
}
}
Frenky-90
24-01-2012, 09:46
Ciao.
Se vi posto un test di java mi aiutate a farlo?
Se nn lo passo non mi sblocca le altre parti di lezione. intanto ora mi sto concentrando su MySql e XHTML.
Posso?
Frenky-90
25-01-2012, 12:16
ok
Boh, non saprei :stordita:
banryu79
25-01-2012, 13:05
@Frenky-90: e anche a tutti gli altri.
Ricordo che il regolamento di sezione di questo forum vieta di chiedere (e fornire) risposte/soluzioni complete a esercizi/test/esami scolastici, per ovvie ragioni.
Un conto è aiutare a dipanare i dubbi di utente in difficoltà, o a ragionare assieme a lui e/o a correggere del codice; un altro è dare soluzioni ad esercizi o test soggetti a valutazione.
Scusate la pedanteria, ma vedo che ultimamente i mod latitano.
clockover
25-01-2012, 13:07
E io ancora non riesco a capire se indentare il codice si paghi :doh:
Frenky-90
25-01-2012, 13:10
si adesso cancello.
cancellerà anche ndakota...
cmq grazie.
Cmq è un test che ho pagato, non è un esame.. puoi farti aiutare da chi vuoi, basta che capisci l'esercizio.
banryu79
25-01-2012, 13:17
Cmq è un test che ho pagato, non è un esame.. puoi farti aiutare da chi vuoi, basta che capisci l'esercizio.
Ah bon, guarda, io mi sono solo limitato a ricordare cosa dice il regolamento del forum: non sono un moderatore ne pretendo che tu o ndakota cancelliate alcunchè.
Fine OT.
Io mi chiedo che fine abbia fatto Cionci. E anche PGI-Bis :cry:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.