Pagina 1 di 2
Java
Inviato: 26/03/2014, 21:05
da Slime
Apro questo topic dove inserirò tutti i miei dubbi e (sopratutto) gli errori che mi assaliranno durante questa impresa piena di pericoli e paure (imparare a programmare giochi in java
)
Neanche un minuto che mi decido ad iniziare che sorgono i primi errori
Eccolo qui il nostro caro amico rompiballe:
Codice: Seleziona tutto
The serializable class JavaGame does not declare a static final serialVersionUID field of type long
che riscontro sulla quarta riga di questo codice umile e semplice:
Codice: Seleziona tutto
package javagame;
import javax.swing.JFrame;
public class JavaGame extends JFrame {
public JavaGame() {
setTitle("JavaGame");
setResizable(false);
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new JavaGame();
}
}
Grazie di cul..cuore a tutti quelle persone che cercheranno di essere comprensive con me e si abbasseranno al mio livello per spiegarmi bene bene con calma cosa non va bene e cosa va poco male.
E' tutto
Re: Java
Inviato: 26/03/2014, 22:14
da Homunculus
Quello non é un errore, é solo un warning, dovrebbe comunque compilare e funzionare tutto regolarmente. Quel warning ha a che vedere con la serializzazione e deserializzazione degli oggetti (in pratica, il salvataggio di oggetti su file nello stato in cui si trovano al momento del salvataggio).
Quando si fa questa operazione in genere si assegna (manualmente) un ID di serializzazione che é utilizzato da java per riconoscere se un oggetto serializzato corrisponde realmente alla classe, ed essendo tutti i componenti dell'interfaccia di java serializzabili di default, eclipse e il compilatore ti segnalano la cosa (nel tuo caso é il JFrame che implementa serializable).
Probabilmente non ti serve a un fico secco e quindi puoi tranquillamente ignorare il warning, tanto più che se non lo metti tu ci pensa il compilatore da solo a creare un ID in automatico. Se il warning ti da fastidio, fai generare un ID a eclipse e sei a posto.
Re: Java
Inviato: 27/03/2014, 21:53
da Slime
Ok grazie
Re: Java
Inviato: 31/03/2014, 20:10
da Slime
Hola
Vi mancavano le mie domande niubbe?
Codice: Seleziona tutto
import java.util.*;
public class Scanner {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int s = input.nextLine();
}
}
Ricevo edgli errori sulle righe 6 e 7:
The constructor Scanner(InputStream) is undefined
The method nextLine() is undefined for the type Scanner
Che sbaglio?
Re: Java
Inviato: 01/04/2014, 8:40
da Homunculus
Il problema penso dipenda dal fatto che stai cercando di usare la classe Scanner, ma per fare questo hai chiamato la tua classe alle stesso modo... Cambia nome alla tua classe o specifica che vuoi usare quella interna
Re: Java
Inviato: 01/04/2014, 9:30
da Jak
Veramente quello che dici tu homu è consentito.
L'errore parla chiaro. Non hai creato un costruttore per Scanner che accetta quell'argomento e nemmeno il metodo nextLine.
In pratica stai usando 2 funzioni che non esistono perchè non le hai create.
Re: Java
Inviato: 01/04/2014, 12:52
da Slime
Invece cambiando il nome non mi da errore
Grazie Homu
Re: Java
Inviato: 01/04/2014, 18:28
da Jak
Ah aspetta la classe Scanner è già esistente?
Questo spiega tutto, praticamente l'hai ricreata provocando i problemi descritti da me. In pratica era una fusione dei due problemi con la differenza che io ho letto solo l'errore indicato dal compilatore.
Nessuno ha bisogno di me, sto invecchiando
Re: Java
Inviato: 01/04/2014, 18:40
da Slime
Probabilmente sì, e appartiene a java.util .
Ho ancora bisogno di te Jak
So che ho scritto degli strafalcioni, vi prego correggeteli
Il mio obbiettivo è quello di creare una classe che mi permetta di trovare il massimo numero tra quelli scritti tra parentesi (che sono di numero variabile)
Non badate ai nomi, scrivo le prime cose che mi passano per la mente per fare questi esperimenti
La classe Lama è la classe che mi deve permettere il lavoro descritto sopra, l'altra serve solo per crearne un oggetto e scrivere a schermo il valore massimo
Lama
Codice: Seleziona tutto
public class Lama {
static int j;
static int a[];
static int max;
public Lama(int ... args) {
j = 0;
for(int i : args) {
a[j] = i;
j++;
}//Assegno ogni numero immesso con Lama(...) in uno slot dell'array
max = a[0];//Assegno inizialmente alla variabile max il numero posizionato nel primo slot dell'array
for (int i : a) {
if (a[i] > max) {
max = a[i];
}//Controllo per ogni elemento di a se è maggiore di max, se è vero max diventa quell'elemento
}
}
}
Test
Codice: Seleziona tutto
public class Test {
public static void main(String args[]) {
new Lama(1,2,3,4,5);//Creo l'oggetto Lama (qua mi sa che ho scritto qualche castronata grave, pardon
System.out.println(Integer.toString(Lama.max));//Scrivo la variabile max dell'oggeto Lama a schermo
}
}
L'errore che mi appare è questo
Codice: Seleziona tutto
Exception in thread "main" java.lang.NullPointerException
at Lama.<init>(Lama.java:9)
at Test.main(Test.java:4)
Re: Java
Inviato: 01/04/2014, 19:13
da Jak
Premetto che non conosco java quindi potrei sparare cavolate ma siccome è c-like dovrei cavarmela per cose non particolarmente avanzate.
Tu hai creato un'oggetto Lama ed hai usato il metodo Max che è riferito alla classe e non all'oggetto creato.
Devi prima creare un'istanza della tua classe quindi
e dopo usare questa istanza
Ti mancano un po di basi sulla gestione delle classi.
Re: Java
Inviato: 02/04/2014, 15:57
da Slime
Grazie, ora ho capito
Ma allora la scrittura
quando si usa?
Inoltre, anche se ho sostituito come hai detto tu, l'errore rimane
Si riferisce alle righe
e
Re: Java
Inviato: 02/04/2014, 16:08
da Solid Snake
Devi dichiarare un oggetto Lama come attributo della classe o come variabile locale e poi istanziarla:
Codice: Seleziona tutto
public class Arancia
{
private Lama myLama;//Se non sai cosa vuol dire private vallo a leggere, puoi anche usare public se vuoi.
public static void main(String args[])
{
myLama=new Lama(1,2,3,4,5,6,7,8);//Instanzi un oggetto di tipo Lama e assegni il reference alla variabile myLama
}
}
Per richiamare gli attributi
non statici dell'instanza (variabili e metodi) devi usare il reference:
Codice: Seleziona tutto
myLama.faiQualcosa();//Chiamata ad un metodo dell'istanza myLama
myLama.max//Chiamata alla variabile max dell'istanza myLama
Nella tua classe non hai bisogno di dichiarare i parametri static dato che instanzi la classe Lama.
Per l'errore nell'array:
Non puoi modificare un array di cui non sai le dimensioni. Prima devi dichiarale.
naturalmente puoi anche dichiarare la dimensione in base ad una variabile:
Nel tuo caso non serve! Perche il parametro args è un array di int, quindi puoi usarlo direttamente senza crearne un altro.
Re: Java
Inviato: 02/04/2014, 18:12
da Slime
Ok, ho modificato il codice così:
Codice: Seleziona tutto
public class Lama {
static int j;
static int max;
public Lama(int ... args) {
j = 0;
for(int i : args) {
args[j] = i;
j++;
}//Assegno ogni numero immesso con Lama(...) in uno slot dell'array
max = args[0];//Assegno inizialmente alla variabile max il numero posizionato nel primo slot dell'array
for (int i : args) {
if (args[i] > max) {
max = args[i];
}//Controllo per ogni elemento di a se è maggiore di max, se è vero max diventa quell'elemento
}
}
}
Codice: Seleziona tutto
public class Test {
private static Lama my_lama;
public static void main(String args[]) {
my_lama = new Lama(1,2,3,4,5);//Creo l'oggetto Lama (qua mi sa che ho scritto qualche castronata grave, pardon
System.out.println(Integer.toString(my_lama.max));//Scrivo la variabile max dell'oggeto Lama a schermo
}
}
E mi da questo errore:
Codice: Seleziona tutto
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Lama.<init>(Lama.java:13)
at Test.main(Test.java:5)
sulle linee
e
PS: Mi ero dimenticato di dire che sulla riga 5 della classe Test (questa per intenderci:
System.out.println(Integer.toString(my_lama.max));) mi da un warning:
Codice: Seleziona tutto
The static field Lama.max should be accessed in a static way
Re: Java
Inviato: 02/04/2014, 19:24
da Nix
Jak ha scritto:Ti mancano un po di basi sulla gestione delle classi.
Gli mancano le basi di tutto. Da dove lo stai imparando? Il codice è pieno di roba senza senso, ed è evidente che neanche tu ti rendi conto di cosa fa ogni riga. L'errore è abbastanza chiaro: l'indice va oltre i limiti dell'array. Infatti l'array passato al costruttore di Lama va da 1 a 5, e tu usi il suo contenuto come indice per l'array stesso (per giunta nel primo for lo copi su sè stesso, non facendo nulla praticamente). Ma gli indici vanno da 0 a 4, e inoltre se il tuo programma deve calcolare il numero massimo, non ha comunque senso quella cosa di usare il contenuto dell'array come indice per l'array stesso (max = args
). Mettendo anche i - 1 per esempio, non potresti trovare il massimo tra 2, 3, 4, 5, 6. E riguardo alla cosa dello static, perché usi i metodi e i campi statici se non sai neanche cosa sono?
Re: Java
Inviato: 02/04/2014, 19:46
da Slime
Grazie mille della risposta, ora capisco come si sentono i nabbi di GMI
Nix ha scritto:L'errore è abbastanza chiaro: l'indice va oltre i limiti dell'array. Infatti l'array passato al costruttore di Lama va da 1 a 5, e tu usi il suo contenuto come indice per l'array stesso (per giunta nel primo for lo copi su sè stesso, non facendo nulla praticamente). Ma gli indici vanno da 0 a 4, e inoltre se il tuo programma deve calcolare il numero massimo
Questo ho sbagliato io, mi sono dimenticato di cancellare quella parte dopo aver modificato (mai fare le cose di fretta) il codice ^ , ora modifico
Il resto non ho capito bene. Intendi questo punto?
In questo caso non dovrebbe passarsi tutti i posti dell'array in base alla sua lunghezza (quindi aumentare di 1
i finchè non raggiunge la lunghezza dell'array args)?
Oppure ho interpretato male?
E riguardo alla cosa dello static, perché usi i metodi e i campi statici se non sai neanche cosa sono?
Perchè mi dava warning strani circa il non poter richiamare variabili non statiche da metodi statici (o qualcosa del genere), hai ragione non ho capito cosa siano
Re: Java
Inviato: 02/04/2014, 20:13
da Nix
Slime ha scritto:Grazie mille della risposta, ora capisco come si sentono i nabbi di GMI
Il problema non è essere nabbi, ma star imparando male. Quindi:
Nix ha scritto:Da dove lo stai imparando?
Slime ha scritto:
In questo caso non dovrebbe passarsi tutti i posti dell'array in base alla sua lunghezza (quindi aumentare di 1 i finchè non raggiunge la lunghezza dell'array args)?
No, i assume il
contenuto dei "posti" dell'array, non il loro indice.
Slime ha scritto:hai ragione non ho capito cosa siano
Per questo ti chiedo come lo stai imparando.
Re: Java
Inviato: 02/04/2014, 20:30
da Slime
No, i assume il contenuto dei "posti" dell'array, non il loro indice.
Ah ecco dove sbagliavo
pensavo che in quel caso stesse per la lunghezza dell'array.
Ok ho risolto così:
Inizialmente imparavo seguendo questi tutorial
https://www.youtube.com/playlist?list=P ... 9D83EE3E28 , poi però mi sono stancato (erano veramente troppi) e ho iniziato a leggere la guida di html.it
http://www.html.it/guide/guida-java/ ma a un certo punto pensavo di essere pronto per scrivere un programmino, così ho iniziato.
Comunque ora il programma funziona
Codice: Seleziona tutto
public class Lama {
static int j;
static int max;
public Lama(int ... args) {
max = args[0];//Assegno inizialmente alla variabile max il numero posizionato nel primo slot dell'array
for(int i = 0; i<args.length; i++) {
if (args[i] > max) {
max = args[i];
}//Controllo per ogni elemento di a se è maggiore di max, se è vero max diventa quell'elemento
}
}
}
Codice: Seleziona tutto
public class Test {
private static Lama my_lama;
public static void main(String args[]) {
my_lama = new Lama(1,9,3,4,5);//Creo l'oggetto Lama (qua mi sa che ho scritto qualche castronata grave, pardon
System.out.println(Integer.toString(my_lama.max));//Scrivo la variabile max dell'oggeto Lama a schermo
}
}
Ma mi appare comunque il warning soprascritto ^ : |
Re: Java
Inviato: 02/04/2014, 20:41
da Nix
Mi aspettavo che avresti detto o youtube, o html.it, e invece li hai citati entrambi. È questo il problema. Non conosco una buona guida per il Java, visto che, conoscendo già altri linguaggi simili come il C#, per me è diverso da te che vieni dal GML, ma è probabile che quelle che hai messo fanno schifo. Su YouTube perché fare delle guide video sulla programmazione è tipico dei nabbi, ed è in ogni caso una cosa stupida, mentre per html.it ho visto che molte guide sulla programmazione (quelle sul web development sono molto meglio) sono pessime, quindi probabilmente anche quella per il Java lo è. Ti consiglio comunque di studiare sempre in inglese, c'è molto più materiale e questo è molto più serio e preciso.
Riguardo allo static comunque, il problema è che chiami un metodo statico da un'istanza, mentre ciò che è statico "appartiene" alla classe.
Re: Java
Inviato: 02/04/2014, 20:49
da Slime
E' più probabile che io abbia seguito male i tutorial
Comunque, allora come risolvo?
Re: Java
Inviato: 02/04/2014, 20:52
da Nix
Slime ha scritto:E' più probabile che io abbia seguito male i tutorial
Secondo me è al contrario.
Slime ha scritto:Comunque, allora come risolvo?
Togliendo static.