[DOMANDA] [Risolto]Java - primi passi

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#1
Dopo una ricerca sul web, ho cominciato a leggere un libro formativo su java-8. Naturalmente ho cercato di affiancare alla teoria anche la pratica, cominciando a svolgere esercitazioni, ma ne ho potuto svolgere bene solo una, la più semplice e classica "Ciao mondo". Ho potuto così conoscere la prima classe, rappresentativa del nome del programma e del nome del file.java.
Ora sarebbe il caso di passare ad un secondo esercizio, ma ho trovato un libro di esercizi che aggiunge all'unica classe del 1° esercizio una seconda classe, senza farmi provare prima a riempire la prima classe di qualche metodo.
Francamente mi trovo, secondo me, a dover fare un salto, mentre dovrei imparare a camminare. Ho provato allora a complicare io un esercizio semplice, preso da un corso universitario, aggiungendovi chiamate a metodi, ma, non essendo affiancato dalla soluzione, non riesco nemmeno a compilare il programmino, per via degli errori che si manifestano all'atto della compilazione.
E allora, dove posso trovare una raccolta di esercizi con livelli di difficoltà graduali, sì da imparare veramente?
 
Ultima modifica:
398
254
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
#2
Non fare il passo più lungo della gamba, inizia a seguire il testo. Onestamente se sai scrivere solo l'hello world, sei agli inizi, non conosci nulla ancora del linguaggio, quindi qualsiasi esercitazione risulterebbe difficoltosa (inoltre finiresti per utilizzare costrutti del linguaggio senza sapere cosa sono).

Ad esempio: i tipi di dati, li hai affrontati? I costrutti condizionali? I cicli iterativi? Se la risposta è negativa, prosegui con lo studio, e mano a mano integrerai le piccole cose (magari con operazioni matematiche, ad esempio).
 
Mi Piace: Andretti60

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#4
Non fare il passo più lungo della gamba, inizia a seguire il testo. Onestamente se sai scrivere solo l'hello world, sei agli inizi, non conosci nulla ancora del linguaggio, quindi qualsiasi esercitazione risulterebbe difficoltosa (inoltre finiresti per utilizzare costrutti del linguaggio senza sapere cosa sono).
Sono d'accordo, però senza applicare con le esercitazioni quanto studiato, perderei prestissimo il ricordo di quanto appreso sulle righe, quindi necessita assolutamente un buon supporto pratiico. Considera che la mia mente non ha più la forza antica.
Ad esempio: i tipi di dati, li hai affrontati? I costrutti condizionali? I cicli iterativi? Se la risposta è negativa, prosegui con lo studio, e mano a mano integrerai le piccole cose (magari con operazioni matematiche, ad esempio).
Dai, stai parlando di argomenti già noti, fritti e rifritti; cambia tuttavia la sintassi, lo so. Comunque li ho affrontati ed in parte anche applicati nel mio 2°'esercizio infinito.
Grazie a tutti per i consigli. Cercherò in internet quello di cui ho bisogno. Certamente lo troverò.
 
398
254
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
#5
Sono d'accordo, però senza applicare con le esercitazioni quanto studiato, perderei prestissimo il ricordo di quanto appreso sulle righe, quindi necessita assolutamente un buon supporto pratiico. Considera che la mia mente non ha più la forza antica.
Questo sicuramente, senza applicazione non c'è programmazione.

Dai, stai parlando di argomenti già noti, fritti e rifritti; cambia tuttavia la sintassi, lo so. Comunque li ho affrontati ed in parte anche applicati nel mio 2°'esercizio infinito.
Grazie a tutti per i consigli. Cercherò in internet quello di cui ho bisogno. Certamente lo troverò.
In realtà non hai detto di programmare in altro, quindi ho dato per scontato fossi al primo linguaggio ed agli inizi.
Se sei al primo linguaggio, senza darci info su cosa conosci, è difficile proporti qualcosa in quanto potrebbe essere troppo semplice o troppo complesso in base al tuo grado di conoscienza.

E se quanto sopra è così, cioè è la prima volta che vedi la OOP, aggiunge N classi non cambierà le cose purtroppo. C'è dietro anche della teoria, e non poca; alcune cose devono essere comprese a livello teorico per capire quando e come utilizzarle.
 

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#6
Q
In realtà non hai detto di programmare in altro, quindi ho dato per scontato fossi al primo linguaggio ed agli inizi.
Se sei al primo linguaggio, senza darci info su cosa conosci, è difficile proporti qualcosa in quanto potrebbe essere troppo semplice o troppo complesso in base al tuo grado di conoscienza.
Ti sbagli: vedi qua.
Ma non ti preoccupare, ogni consiglio buon e costruttivo è sempre accettato
 
398
254
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
#7
Questo cambia le cose.

Il main() essendo statico è soggetto ad alcune limitazioni; ad esempio può chiamare solo metodi statici. Quindi l'altro esercizio che hai visto, quello con due classi, in fondo ci può stare: creerà un oggetto dell'altra classe, e probabilmente al suo interno verranno poi creati più metodi (e magari variabili).
Visto che sei un programmatore in pensione, potresti anche provare a gestire qualcosa di semplice come un array di oggetti di tipo Persona, o di prenotazioni o altro di simile, come ad esempio la classica gestione di matricole universitarie e relativi corsi e voti (quindi oggetti ditipo Prsona e Corso).

Come noterai però si tratta sempre di dover gestire più oggetti, che si traduce in avere più classi (l'oggetto è l'istanza di una classe; una classe in memoria, insomma). Qui in Java "tutto è un oggetto" (o quasi, non lo sono i tipi semplici/primitivi), quindi tutte le progettazioni sono modellate su più classi.

Di solito si usa una sola classe quando si sta imparando e non si conoscono costrutti ed altro ancora. Tutto ciò che puoi fare, se vuoi richiamare altri medoti, è crearli come static. Si tratta in sintesi di metodi che possono essere richiamati da altre classi (in base agli specificatori di accesso: public, private, protected e nessuno specificatore esplicito) senza bisogno di creare un oggetto. Un esempio di classe con metodi statici è ad esempio Math (java.lang.Math).
 
#8
E allora, dove posso trovare una raccolta di esercizi con livelli di difficoltà graduali, sì da imparare veramente?
Temo sia la domanda da un milione di dollari. Cioè si trovano ottime risorse che pongono problemi, ma senza le soluzioni. Una delle poche risorse ben fatte in questo senso è https://rosettacode.org/wiki/Rosetta_Code

Noterai che presenta le soluzioni in vari linguaggi, cosa che può essere utile per fare confronti e capire concetti di un linguaggio che risultano pochi chiari.

p.s. come mai ( nell'altro thread ) pensi che Gambas non sia un linguaggio proiettato in avanti? Non è diffuso, ma le sue cose le fa. Per esempio un altro linguaggio che viene snobbato per qualche strana ragione è FreePascal/Lazarus. Eppure è Object Pascal, viene mantenuto ed aggiornato, ha pure una visual component library sua, supporta svariati sistemi operativi. Non è usato dai fighetti della Silicon Valley, ma fa il suo lavoro egregiamente.
 

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#9
Temo sia la domanda da un milione di dollari. Cioè si trovano ottime risorse che pongono problemi, ma senza le soluzioni. Una delle poche risorse ben fatte in questo senso è https://rosettacode.org/wiki/Rosetta_Code
Noterai che presenta le soluzioni in vari linguaggi, cosa che può essere utile per fare confronti e capire concetti di un linguaggio che risultano pochi chiari.
Grazie. Io pensavo ad uno strumento dedicato a Java. Lo guarderò comunque.
La mia ricerca di un libro di esercizi con le soluzioni nasce dal fatto che non riesco a compilare un programmino semplice che richiama 4 metodi per l'immissione controllata di 3 parole e la loro visualizzazione sulla console di sistema.
Gli esercizi con le soluzioni mi servono per capire dove sbaglio perchè, da solo, con le mie attuali conoscenze, non sono capace.
[QUOTE
pensi che Gambas non sia un linguaggio proiettato in avanti? Non è diffuso, ma le sue cose le fa.[/QUOTE]
Lo conosco molto bene ma, secondo me, ha due grandi limitazioni; non è multipiattaforma e non è presente nei repository di tutte le distro Linux. In alcune di esse, l'unica via percorribile per procedere all'installazione è quella di scaricare il sorgente con tutte le sue dipendenze ed assemblare il tutto in casa, a manina, per ottenere finalmente il pacchetto finale, necessario per cominciare a programmare. Una volta L'ho fatto, e non è stata una passeggiata.
Ho dovuto, per ciò, rinunziare a provare approfonditamente alcuni S.O. Linux, apparentemente interessanti.
Quanto appena detto ha determinato la spinta ad affacciarmi alla conoscenza di altri linguaggi. Dopo avere un pò curiosato e chiesto pareri sul web, la mia scelta è caduta sul Java, perchè mi sembra alla portata per l'esperienza già acquisita in Gambas e per la sua stretta vicinanza sintattica al C++.
 
398
254
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
#10
Grazie. Io pensavo ad uno strumento dedicato a Java. Lo guarderò comunque.
La mia ricerca di un libro di esercizi con le soluzioni nasce dal fatto che non riesco a compilare un programmino semplice che richiama 4 metodi per l'immissione controllata di 3 parole e la loro visualizzazione sulla console di sistema.
Gli esercizi con le soluzioni mi servono per capire dove sbaglio perchè, da solo, con le mie attuali conoscenze, non sono capace.
Prova a mostrarci quel sorgente ed il modo in cui compili, magari possiamo esserti d'aiuto.
 
#11
non riesco a compilare un programmino semplice che richiama 4 metodi per l'immissione controllata di 3 parole e la loro visualizzazione sulla console di sistema.
Quasi sicuramente è un problema del build system. Mi viene in mente la CLASSPATH. In ogni caso è meglio usare un IDE per compilare i sorgenti Java, almeno finchè non si è approfondito l'arzigogolo che sta dietro la compilazione di programmi Java.

la mia scelta è caduta sul Java, perchè mi sembra alla portata per l'esperienza già acquisita in Gambas e per la sua stretta vicinanza sintattica al C++.
Capisco. Java è un buon linguaggio e molto diffuso. Ovviamente ce ne sono parecchi altri, anche più "moderni", tipo Go e Rust. C'è la famiglia deI LISP ( Racket, Clojure, Common Lisp ). Ma chiaramente Java ha i suoi punti di forza.
 

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#12
Prova a mostrarci quel sorgente ed il modo in cui compili, magari possiamo esserti d'aiuto.
Si, penso che lo farò. Ci sto lavorando un pò su per renderlo un pò più semplice e riprovare a compilare sempre col comando javac. In questo momento uso come editor di testo "Geany"; pensavo infatti di installare "NetBeans" solo quando nascerà l'opportunità di aggiungere oggetti grafici.
 
#13
compilare sempre col comando javac. In questo momento uso come editor di testo "Geany"
Come pensavo. I problemi di compilazione nascono sempre dall'uso dei comandi cli. Purtroppo Java in questo è stranamente ostico. Tra CLASSPATH e una curiosa sintassi, non se ne esce facilmente. In particolare sotto Windows.

Comunque il classico hello world somiglia a questo

Java:
public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello, World");
    }

}
E lo si compila con

javac HelloWorld.java --> il nome del file dev'essere lo stesso della classe pubblica

e si esegue con

java HellWorld invece di java HelloWorld.class come uno si aspetterebbe
 
#14
Un suggerimento tanto banale quanto efficace:
su Windows è preferibile installare Java in una directory più "facile" possibile, per esempio C:\jdk
in questo modo i tool sono tutti in C:\jdk\bin ed è più semplice (eventualmente) impostare la variabile di ambiente PATH (e spesso non è neanche necessario).
per quanto riguarda CLASSPATH suggerisco invece di non impostarla affatto: il compilatore cercherà le classi prima in quelle predefinite e poi nella stessa directory di quella da cui si compila. Per progetti più complicati invece, tipicamente si usa un IDE sofisticato come Netbeans; quest'ultimo trova i percorsi di classe da solo (salvo casi eccezionali di uso di librerie esterne specifiche, non è questo il caso).

Se si usano ambienti/IDE/editor specifici per Java, non è necessario fare assolutamente nulla; Netbeans fa tutto da solo, basta installarlo; a editor per Java come Bluej è sufficiente indicare il percorso di installazione di Java. Le configurazioni completamente manuali sono necessarie solo se si usano ambienti non specifici.
 

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#15
Il mio programmino tipo helloworld e:
Codice:
class PrimApplicazione {
	public static void main (String args[]) {
		System.out.println("la mia prima applicazione!");
	}
}
.
Io l'ho compilato con
Codice:
[petrus@localhost java_vari]$  javac PrimApplicazione.java
e lo posso eseguire con:
[petrus@localhost java_vari]$ java PrimApplicazione
la mia prima applicazione!
Ricordandovi che io utilizzo Linux fedora, aggiungo che non ho avuto bisogno di installare java perchè trovato installato java 8, completo di dipendenze, quindi non mi sono preoccupato di risalire alla directory di installazione di Java perchè non ne ho bisogno. L'unico onere che ho è quello di esgeuire il comando dalla directory in cui si trova il programma da avviare (nel mio caso il programma compilato si chiama "PrimApplicazione.class").
Ho riportato la citazione del comando d'esecuzione dato, per mostrarvi il suo corretto funzionamento.

Spero di potervi aggiornare domani sul 2° programmino, quello che non sono riuscito a compilare