PDA

View Full Version : [JAVA] domanda su un random e domanda su un metodo


IAmZak
10-01-2009, 11:23
ciao ragazzi! 2 domande...

1)
come faccio a far pescare a random un numero da 0 a 4 (compresi)?
perchè io conosco solo il comando (int)(Math.random()) ma posso darci solo multipli di 10 come vincoli.

2)
ho un metodo così:

public boolean possoPuntare(int id){
switch(id){
case 0: if(puntataG0==1){possoG0= false; return possoG0;} else
{possoG0=true; return possoG0;}
case 1: if(puntataG1==1){possoG1= false; return possoG1;} else
{possoG1=true; return possoG1;}
case 2: if(puntataG2==1){possoG2= false; return possoG2;} else
{possoG2=true; return possoG2;}
}
}

dove le cose che sono in return sono boolean.
ho sempre fatto così e ha sempre funzionat, ma sta volta mi dà errore: missing return statement...... non sò perchè

grazie a tutti

franksisca
10-01-2009, 11:59
così non ti piace?(int)(Math.random()*5)
per i secondo prova ad aggiungere il case default;

IAmZak
10-01-2009, 12:36
così non ti piace?(int)(Math.random()*5)
per i secondo prova ad aggiungere il case default;

nn pensavo si potesse :stordita:

per il secondo, non mi serve nessun default. me lo invento io?

franksisca
10-01-2009, 13:17
nn pensavo si potesse :stordita:

per il secondo, non mi serve nessun default. me lo invento io?

si
P.S.: sinceramente non ho provato...sto andando "a naso"...

IAmZak
10-01-2009, 13:21
ah ecco. beh allora aspetto qualcuno che mi dia una risposta sicura.
anche perchè mettere il 5 sembra che non aiuti, sicchè la base di un random dovrebbe essere un numero compreso tra 0 e 1

franksisca
10-01-2009, 13:43
ah ecco. beh allora aspetto qualcuno che mi dia una risposta sicura.
anche perchè mettere il 5 sembra che non aiuti, sicchè la base di un random dovrebbe essere un numero compreso tra 0 e 1

sul random sono sicuro....sul default no...

IAmZak
10-01-2009, 13:44
sul random sono sicuro....sul default no...

ah ok!

Don[ITA]
10-01-2009, 13:53
Il metodo random() della classe Math ritorna un double compreso tra 0 e 1 il che significa che potrebbe essere qualcosa come 0.1558962 o 0.9986533 o ancora 0.5778 ecc ecc. E' solo il successivo cast a int che ti fa ottenere o 0 o 1. Quindi se esegui questo codice:

(int)(Math.random() * 5)

ottieni esattamente un numero casuale intero compreso che va da 0 a 4 compresi :D

Per quanto riguarda quel metodo devi appunto aggiungere il caso di default che ti devi inventare tu. Oppure puoi fare cosi:

public boolean possoPuntare(int id) {
boolean result = false;
switch (id) {
case 0:
if (puntataG0 == 1) {
possoG0 = false;
result = possoG0;
break;
} else {
possoG0 = true;
result = possoG0;
break;
}
case 1:
if (puntataG1 == 1) {
possoG1 = false;
result = possoG1;
break;
} else {
possoG1 = true;
result = possoG1;
break;
}
case 2:
if (puntataG2 == 1) {
possoG2 = false;
result = possoG2;
break;
} else {
possoG2 = true;
result = possoG2;
break;
}
}
return result;
}

che sostanzialmente non si differisce dall'aggiungere un caso di default che ritorna false.
Questo serve perchè giustamente senza il caso di default non è detto che lo switch ti ritorni qualcosa. Ad esempio se id fosse 3 quello switch non tornerebbe nulla :)

Spero di aver chiarito i tuoi dubbi :D

Saluti

IAmZak
10-01-2009, 14:02
ma id ha risultati precisi, su quello non c'è problema.
cmq thanks :-)

Don[ITA]
10-01-2009, 14:41
si ma il compilatore mica lo sa che id sarà effettivamente 0, 1 o 2 :D
per quello ti richiede anche il default :D

Ciauz

IAmZak
10-01-2009, 14:47
;25782772']si ma il compilatore mica lo sa che id sarà effettivamente 0, 1 o 2 :D
per quello ti richiede anche il default :D

Ciauz

si che lo sà.... fidati.
l'ho programmato io, lo sò cosa ho scritto

IAmZak
10-01-2009, 15:03
tanto che sono qua vi chiedo una cosa:
se io ho 3 variabili int normalissime.... e voglio che quando una delle tre è =3 allora devo eseguire un istruzione, come faccio?
ho provato con l'or in un if, ma non mi sembra che funzioni

Ken1986
10-01-2009, 15:42
If (varabile1 == 3) || (variabile2 == 3) || (variabile3 == 3){
....quello che devi fare
}

Don[ITA]
10-01-2009, 15:46
si che lo sà.... fidati.
l'ho programmato io, lo sò cosa ho scritto

Fidati non lo sà ;)
Io parlo del compilatore :cool:

Saluti

IAmZak
10-01-2009, 15:56
;25783869']Fidati non lo sà ;)
Io parlo del compilatore :cool:

Saluti

id è un int che è 0,1,2 a seconda dei casi (ogni thread che creo ha un id, e sono 3 thread). quindi qualunque valore assuma dei 3, nel case li gestisco. capisci?

grazie per la parte dell'or, mettevo una sola stanghetta eheheh

IAmZak
10-01-2009, 16:06
If (varabile1 == 3) || (variabile2 == 3) || (variabile3 == 3){
....quello che devi fare
}


non và, mi dà 3 errori.
illegal start of expression, not a statment, ;

Don[ITA]
10-01-2009, 16:41
If ((varabile1 == 3) || (variabile2 == 3) || (variabile3 == 3)){
....quello che devi fare
}

Don[ITA]
10-01-2009, 16:42
id è un int che è 0,1,2 a seconda dei casi (ogni thread che creo ha un id, e sono 3 thread). quindi qualunque valore assuma dei 3, nel case li gestisco. capisci?

grazie per la parte dell'or, mettevo una sola stanghetta eheheh

Si capisco che quel valore non assumerà mai qualcosa di diverso da 0, 1 o 2, ma il compilatore java questo non lo sà. :fagiano:

IAmZak
10-01-2009, 16:47
ah tu dici che se anche io lo imposto di modo che fà solo 0 1 o 2, devo programmare sempre con quella condizione, per essere sicuro!
grazie per la dritta :-)

IAmZak
10-01-2009, 17:08
si ma sarò scemo io, o scema sta jvm.

se io faccio uno switch del tipo:

switch(abc){
case 1: blablabla; break;
case 2: blablabla; break;
case 3: blablabla; break;
default: no; break;
}

e abc (per via del mio programma) può essere o 1 o 2 o 3 (ed errori di programmazione qua non li ho), e il default esiste apposta perchè se non è uno di questi valori allora esce lui....
com'è che nell'output (facendo girare il programma un pò) mi vedo apparire ogni tanto "no"

franksisca
10-01-2009, 18:39
si ma sarò scemo io, o scema sta jvm.

se io faccio uno switch del tipo:

switch(abc){
case 1: blablabla; break;
case 2: blablabla; break;
case 3: blablabla; break;
default: no; break;
}

e abc (per via del mio programma) può essere o 1 o 2 o 3 (ed errori di programmazione qua non li ho), e il default esiste apposta perchè se non è uno di questi valori allora esce lui....
com'è che nell'output (facendo girare il programma un pò) mi vedo apparire ogni tanto "no"
fidati....la JVM non sbaglia....avrai sbagliato tu...posta il codice.

IAmZak
10-01-2009, 19:35
ti posto un pezzo, perchè senò è troppa roba


Giocatore[] giocatore = new Giocatore[5];
for (int i=0; i<5; i++){
giocatore[i]=new Giocatore(i,tavolo);
giocatore[i].start();
}

poi chiamo il metodo

tavolo.azzeraPuntata(id);

e poi ho un metodo così

public void azzeraPuntata(int id){
switch(id){
case 0: puntataG0=0;
case 1: puntataG1=0;
case 2: puntataG2=0;
case 3: puntataG3=0;
case 4: puntataG4=0;
default: System.out.println("Nothing"); break;
}
}


vedi che id glielo passo io, quindi non sarà mai diverso da 0,1,2,3,4

franksisca
10-01-2009, 19:39
ti posto un pezzo, perchè senò è troppa roba


Giocatore[] giocatore = new Giocatore[5];
for (int i=0; i<5; i++){
giocatore[i]=new Giocatore(i,tavolo);
giocatore[i].start();
}

poi chiamo il metodo

tavolo.azzeraPuntata(id);

e poi ho un metodo così


vedi che id glielo passo io, quindi non sarà mai diverso da 0,1,2,3,4

losò ma il compilatore non lo sà -.-

ma dimmi un pò...sei autodidatta o studi?

IAmZak
10-01-2009, 19:51
autodidatta, riguardo a questo particolare caso.
ho fatto studiando Java (e cmq tanto tempo fa), ma qua si unisce Java-thread che sto facendo da solo

franksisca
10-01-2009, 21:36
autodidatta, riguardo a questo particolare caso.
ho fatto studiando Java (e cmq tanto tempo fa), ma qua si unisce Java-thread che sto facendo da solo

perchè il fatto che tu insista su quella questione mostra chiare lacune concettuali!!!

Don[ITA]
10-01-2009, 22:19
public void azzeraPuntata(int id){
switch(id){
case 0: puntataG0=0;
case 1: puntataG1=0;
case 2: puntataG2=0;
case 3: puntataG3=0;
case 4: puntataG4=0;
default: System.out.println("Nothing"); break;
}
}

Da questo codice ti verrà sempre stampato "Nothing" prima o poi :) Il motivo è che non hai messo i break in tutti i casi specifici. Quindi quando chiamerai questo metodo ad esempio con id = 3, il risultato di tale chiamata sarà quello di mettere puntataG3 = 0, e di stampare il messaggio "Nothing" perchè come caso di default viene eseguito sempre a meno che non si interrompa lo switch prima.

Se hai altri dubbi siamo qui per chiarirteli :D

Saluti

IAmZak
11-01-2009, 11:22
ahahahhahahahah
è vero!
non mi ero neanche accorto, e pensa che culo che ho messo quell'esempio, perchè gli altri switch ce l'hanno il break..........
quello no :stordita: