RISOLTO Java - primi passi

Stato
Discussione chiusa ad ulteriori risposte.

petrusic

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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
Reazioni: Andretti60

Andretti60

Utente Èlite
6,440
5,091
si, in effetti prima di studiare le classi dovresti imparare la sintassi del linguaggio, forse il libro che stai usando è troppo avanzato per te.
 

petrusic

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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ò.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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).
 

pabloski

Utente Èlite
2,868
916
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

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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++.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,207
1,844
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 

pabloski

Utente Èlite
2,868
916
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

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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.
 

pabloski

Utente Èlite
2,868
916
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
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,452
11,351
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
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

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili