|
| Problemer med at få long til at blive int Fra : rofe@mailme.dk |
Dato : 24-10-02 14:28 |
|
Hej NG
Jeg kan simpelthen ikke se hvorfor dette ikke vil virke.
Er der nogle der kan fortælle mig hvorfor ?
public class Nim
{
private int computerIntelligence; /* 0 stupid, 1 smart */
public Nim()
{
/* is the computer smart or stupid */
long i = Math.round(Math.random());
computerIntelligence = Long.intValue(i);
}
}
Jeg skal lave et random number, runde det af til 0 eller 1 og konvertere det
til en int.
Håber nogle kan hjælpe
m v h
Ronni
rofe@mailme.dk
| |
Rico Wind (24-10-2002)
| Kommentar Fra : Rico Wind |
Dato : 24-10-02 16:04 |
|
rofe@mailme.dk wrote
>
> long i = Math.round(Math.random());
> computerIntelligence = Long.intValue(i);
Prøv blot og caste den med.
int computerIntelligence = (int)i;
/Rico
| |
Hancater (24-10-2002)
| Kommentar Fra : Hancater |
Dato : 24-10-02 16:04 |
|
> Er der nogle der kan fortælle mig hvorfor ?
>
> public class Nim
> {
> private int computerIntelligence; /* 0 stupid, 1 smart */
>
> public Nim()
> {
>
> /* is the computer smart or stupid */
> long i = Math.round(Math.random());
> computerIntelligence = Long.intValue(i);
>
> }
> }
>
> Jeg skal lave et random number, runde det af til 0 eller 1 og konvertere
det
> til en int.
>
>
> Håber nogle kan hjælpe
Ved ikke om det hjælper, men metoden intValue() returnerer værdien som en
int.
Prøv det.
-Ostekongen
| |
Jimmi Wolff (24-10-2002)
| Kommentar Fra : Jimmi Wolff |
Dato : 24-10-02 16:32 |
|
Jeg ville nok også bare carste til en int, sådan her:
(int)(Math.round(Math.random()));
<rofe@mailme.dk> skrev i en meddelelse news:ap8sg2$c8d$1@sunsite.dk...
> Hej NG
>
> Jeg kan simpelthen ikke se hvorfor dette ikke vil virke.
>
> Er der nogle der kan fortælle mig hvorfor ?
>
> public class Nim
> {
> private int computerIntelligence; /* 0 stupid, 1 smart */
>
> public Nim()
> {
>
> /* is the computer smart or stupid */
> long i = Math.round(Math.random());
> computerIntelligence = Long.intValue(i);
>
> }
> }
>
> Jeg skal lave et random number, runde det af til 0 eller 1 og konvertere
det
> til en int.
>
>
> Håber nogle kan hjælpe
>
>
> m v h
> Ronni
> rofe@mailme.dk
>
>
>
| |
rofe@mailme.dk (24-10-2002)
| Kommentar Fra : rofe@mailme.dk |
Dato : 24-10-02 18:47 |
|
Yeps takker for hjælpen.
Jeg tænkte i helt forkerte baner der :)
/Ronni
| |
Filip Larsen (24-10-2002)
| Kommentar Fra : Filip Larsen |
Dato : 24-10-02 19:40 |
|
<rofe@mailme.dk> skrev
> public class Nim
> {
> private int computerIntelligence; /* 0 stupid, 1 smart */
>
> public Nim()
> {
>
> /* is the computer smart or stupid */
> long i = Math.round(Math.random());
> computerIntelligence = Long.intValue(i);
>
> }
> }
Bemærk, at du med Java2 fx kan gøre det som
Random rng = new Random();
...
computerIntelligence = rng.nextInt(2);
eller, hvis du egentlig bare vil have et flag, noget i retning af:
boolean computerIsSmart = rng.nextBoolean();
Husk at genbruge "rng" hvis du skal lave tilfældige tal andre steder (dvs.
undgå have mange udtryk af typen "new Random().nextBoolean()").
Mvh,
--
Filip Larsen <filip.larsen@mail.dk>
| |
Eva Davidsen (24-10-2002)
| Kommentar Fra : Eva Davidsen |
Dato : 24-10-02 21:42 |
|
Hvis du bare skal bruge et random tal - 0 eller 1, hvorfor så overhovedet
bruge en long? Det er vel næsten som at skyde gråspurve med kanoner. long er
jo en 64 bit udgave af et heltal, hvor int er en 32 bit udgave. Og så vidt
jeg husker, så returnerer Math.random() en double - altså et decimal tal
skarpt mindre en 1 og større end eller lig med 0.
Så hvis du skriver
double d = Math.random();
vil 0<=d og d<1
Hvis du så i stedet skriver
double d = 2*Math.random();
vil 0<=d og d<2
Hvis du så bare typecaster d til en int - vil java tvinge d til at smide
decimalerne væk.
Så alle tal mellem 0 og 1 vil blive til 0
og alle tal mellem 1 og 2 vil blive til 1
Så dette vil give en int med enten 0 eller 1 med lige stor sandsynlighed:
int computerIntelligence = (int)2*Math.random();
// computerIntelligence vil nu enten være 0 eller 1
Mvh Henrik
| |
|
|