|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
[LOGICA BOOLEANA] IMPORTANTE Non mi tornano i conti
Allora.. o io sono stupido........ o veramente qualcosa non torna.....
Se io uso questo enunciato: Codice:
do { first = (int) (Math.random() * dim.getWidth()) - (2 * raggio); second = (int) (Math.random() * dim.getWidth()) - (2 * raggio); System.out.println("Primo: " + first); System.out.println("secondo: " + second); } while (first == 1 && second == 1); In teoria esce dal do-while quando entrambi i valori sono uguali a 1... Esatto? In realtà mi calcola questi: Codice:
Primo: -40 secondo: -40 Primo: 214 secondo: 508 Primo: 149 secondo: 424 Primo: 129 secondo: 233 ... dim.getWidth() restituisce 600 2*Raggio restituisce 40
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 Ultima modifica di jj.69kt : 26-06-2008 alle 14:36. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Esegue una prima volta il blocco di codice specificato tra parentesi dopo il "do" per poi verificare che l'espressione contenuta nel "while" sia TRUE. Se è TRUE allora esegue nuovamente il blocco "do" altrimenti esce dal ciclo. Ne tuo caso esce subito (dopo un'esecuzione). Forse volevi usare l'operatore booleano "!=", non "==" dentro il while.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Forse dovrebbe fare così.... Ma se io metto in questo modo:
Codice:
do { first = (int) (Math.random() * dim.getWidth()) - (2 * raggio); second = (int) (Math.random() * dim.getWidth()) - (2 * raggio); System.out.println("Primo: " + first); System.out.println("secondo: " + second); System.out.println(); } while (first != 1 && second != 1) Codice:
Primo: -40 secondo: -40 Primo: -40 secondo: -40 Primo: -40 secondo: -40 Primo: -40 secondo: -40 Primo: -40 secondo: -40 Primo: -40 secondo: -40 ![]() ![]()
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Scusa,
allora temo di non aver capito che cosa cerchi di ottenere in quel blocco di codice. Puoi spiegarmi?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Ciò che volevo fare è semplice.
Far calcolare due numeri random maggiori di 0. Il codice che ho scritto sopra era uno degli esperimenti di disperazione.. Codice:
do { double firstTemp = (Math.random() * dim.getWidth()) - (2 * raggio); first = (int) firstTemp; double secondTemp = (Math.random() * dim.getWidth()) - (2 * raggio); second = (int) secondTemp; System.out.println("Primo: " + first); System.out.println("secondo: " + second); } while (first >= 1 && second >= 1); Secondo la mia logica dovrebbe:
Ciò che mi mette in crisi è che calcoli sempre "-40" se uso "!="....... O_O AIUTAMIII!!! ![]() ![]() ![]() ![]() ![]() ![]() ![]()
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2005
Città: Modena
Messaggi: 276
|
ma che strano.. anche io l'ho implemenato e da gli stessi problemi... mmmmhh...
__________________
andrew |
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
la motivazione per cui ti ritorna sempre -40 è semplice:
perchè il dim.getWidth() ti ritorna 0 ![]() |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Quote:
Ma sai spiegarmi perché? Poichè il dim.getWidth() in tutto il resto del programma funziona.... E *sembrerebbe* non funzionare SOLO se metto un "not"......
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
![]() |
![]() |
![]() |
#9 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
curiosità,ma che cos'è dim?e come l'hai settato?
|
![]() |
![]() |
![]() |
#10 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
ti spiego la mia curiosità:
se hai usato un container allora il problema è come l'hai settato(se hai hai usato setPreferredSize oppure setSize). se invece hai usato una semplice dimension allora nn so che dirti perchè a me funziona |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Quote:
Comunqe dim è un JFrame..... cosa intendi con "come è settato??" EDIT: Le dimensioni funzionano di sicuro.... Xke uso dim.getWidth() per altre cose e quelle funzionano.. :P
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
![]() |
![]() |
![]() |
#12 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
beh,allora usando dim.setSize(...) dovrebbe funzionare.o perlomeno a me funziona.se poi usi setPreferredSize(...) mi da il tuo stesso risultato cioè -40 all'infinito
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Beh, purtroppo a me no...
Altrimenti come mi spieghi questi valori di uscita: Codice:
a) Primo: 246 secondo: -22 b) Primo: 554 secondo: -10 c) //questo va bene.. :P Primo: 0 secondo: 496 ![]() ![]() Eccoti per esempio il while completo: Codice:
Entrato... Primo: 5 secondo: 99 Primo: 93 secondo: 419 Primo: 503 secondo: 457 Primo: 503 secondo: 233 Primo: 538 secondo: 439 Primo: 435 secondo: 31 Primo: 18 secondo: 99 Primo: 507 secondo: 192 Primo: 349 secondo: 275 Primo: 250 secondo: 327 Primo: 361 secondo: 475 Primo: 540 secondo: 258 Primo: 396 secondo: 431 Primo: 246 secondo: -22 Uscito dal while Con "while (first >= 1 && second >= 1)"......... Doveva uscire già al primo passaggio... poichè: (5 >= 1 && 5 >= 1) (5 > 1 && 5 > 1) (true && true) (true)
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 Ultima modifica di jj.69kt : 26-06-2008 alle 16:23. |
![]() |
![]() |
![]() |
#14 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
in qst caso il tuo problema qual'è?che escono numeri negativi?beh,mi pare ovvio che se usi "!=" significa diverso da 1,cioè minore o maggiore di 1(quindi anche numeri negativi).se nn vuoi numeri negativi non povrai usare il "!=" ma il maggiore uguale.sempre se è qst qllo che mi hai chiesto,altrimenti nn ho capito il problema :P
|
![]() |
![]() |
![]() |
#15 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
ah,ora ho capito
![]() qlla nel while nn è una condizione per uscire,ma restare nel ciclo.quindi se tu >= allora,ti resterà nel ciclo fino a qnd nn troverà dei valori negativi o pari a zero |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Quote:
![]() e comunque.. anche se fosse: while (first >= 1 && second >= 1) sarebbe dovuto uscire al primo tentativo.... poichè: while (99 != 1 && 5 != 1) while (true && true) while (true) !!!!!!! EDIT: Ok, ma allora se io dico: while (!(primo >= 1) && !(primo == 1)) questi valori non hanno senso: Codice:
Primo: 26 secondo: -8 Primo: 168 secondo: -6
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 Ultima modifica di jj.69kt : 26-06-2008 alle 16:36. |
|
![]() |
![]() |
![]() |
#17 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 17
|
ti avevo risp già appena ho capito di nn aver letto tutta la tua risposta :P
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Una possibile risposta e' che
Math.Random restituisce un double tra 0 e 0.9999999999 mentre dim.getWidth() restituisce un intero e c'e' un bel cast implicito non segnalato dal compilatore Java (o forse si' e non l'hai letto) che trasforma il double in intero prima di moltiplicare i valori. quindi sempre zero.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Co questo codice:
Codice:
do { double firstTemp = (Math.random() * dim.getWidth()) - (2 * raggio); first = (int) firstTemp; double secondTemp = (Math.random() * dim.getWidth()) - (2 * raggio); second = (int) secondTemp; System.out.println("Primo: " + first); System.out.println("secondo: " + second); } while (!(first >= 1) && !(second >= 1)); Codice:
a) Primo: -11 secondo: 367 b) Primo: 168 secondo: -6 c) //va *per caso* anche bene Primo: 67 secondo: 91 d) Primo: 26 secondo: -8 ecc..... Io proprio non me lo spiego.. ç__ç
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
si ho letto dopo e ho modificato la mia risp di sopra. :P
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:22.