webForumDet fria alternativet

Behöver hjälp med ett par koder

1 svar · 394 visningar · startad av CtrlAltDel

CtrlAltDelMedlem sedan aug. 20072 inlägg
#1

Tjenare alla!

Ny medlem här. Och relativt ny i JAVA.
Skulle gärna behöva lite hjälp med att tolka ett par koder.
En hemsk omtenta närmar sig - och jag vill lära mig hantera sådana här koder.
Skulle vara ytterst tacksam för all hjälp!

Här är problemen:
1.) Jag blev tillsagd att göra upp en kod, som simulerar 1000 slumpmässiga tärningskast med två tärningar. Sedan ska programet också räkna antalet gånger som tärningarna visar samma sida. (Alltså man kan bara få värden mellan 1-6).
Jag skulle även använda mig av metoden "Math.random()" som jag inte har den blekaste aning hur den fungerar.

I alla fall - jag gjorde som så (med lite "hjälp"):
This is how I did:

class DiceThrows {
public static void main(String[] args) {

    int count = 0; 
    
    for(int i = 0; i \< 1000; i++) { 
            int d1 = (int) Math.random()) \* 6); 
            int d2 = (int) Math.random()) \* 6); 
            if (d1 == d2) count++; 
    
            } 
            
    System.out.println(count); 
    
    } 

}

Problemet: det som skrivs ut är hur många kast jag har gjort. Inte hur många gånger 2 samma värden som påträffas. Hur fixar jag det? Också - hur gör man när man type castar? Jag är inte helt säker på sånt.

2.) Jag skulle kolla igenom vad det här programmet gjorde:

private static void printArray(int[] arr) {
for (int i = 0 ; i < arr.length ; i++) {
System.out.print(arr*);
}
System.out.println();
}

public static void main(String\[\] args) { 
    int\[\] lookup = new int\[\]{0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3}; 
    int\[\] data = new int\[\]{4,3,4,2,5,0,4,8,3,2,8,2,7,4,5}; 
    int\[\]\[\] result = new int\[4\]\[9\]; 
    int\[\] count = new int\[4\]; 
    
    for (int i = 0 ; i \< 15 ; i++) { 
        int pos = lookup\[data*\]; 
        result\[pos\]\[count\[pos\]++\] = data*; 
    } 
    
    for (int\[\] i : result) { 
        printArray(i); 
    } 
} 

}

En HEMSKT klöddig array uppgift. Men jag är nära lösningen. Jag fattar inte vad int[] count = new int[4]; är till för dock - och inte heller om databehövs vid result[pos][count[pos]++] = data;
Om någon kan guida mig genom detta också - skulle jag vara väldigt tacksam!

Jag vill bara klara av detta.
Vänliga hälsningar!*****

LimeMedlem sedan sep. 2001961 inlägg
#2

CtrlAltDel skrev:

Tjenare alla!

Ny medlem här. Och relativt ny i JAVA.
Skulle gärna behöva lite hjälp med att tolka ett par koder.
En hemsk omtenta närmar sig - och jag vill lära mig hantera sådana här koder.
Skulle vara ytterst tacksam för all hjälp!

Här är problemen:
1.) Jag blev tillsagd att göra upp en kod, som simulerar 1000 slumpmässiga tärningskast med två tärningar. Sedan ska programet också räkna antalet gånger som tärningarna visar samma sida. (Alltså man kan bara få värden mellan 1-6).
Jag skulle även använda mig av metoden "Math.random()" som jag inte har den blekaste aning hur den fungerar.

Om man inte vet, så läser man manualen. Den säger följande:

"Math.random(): Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range. "

Om du vill ha ut ett tal som är mellan 1 och 6 så multiplicerar du talet du fått från Math.random() och lägger till 1.

Jag skulle dock använda mig av den underliggande slumptalsgeneratorn direkt istället och skriva:

Random generator = new Random();
int throw = generator.nextInt(6) +1;

Det ger samma effekt. Random.nextInt(n) ger ett tal från 0 (inkluderat) till det specificerade talet n (exluderat), alltså från 0 till 5. Därav +1 på slutet.

CtrlAltDel skrev:

I alla fall - jag gjorde som så (med lite "hjälp"):
This is how I did:

class DiceThrows {
public static void main(String[] args) {

    int count = 0; 
    
    for(int i = 0; i \< 1000; i++) { 
            int d1 = (int) Math.random()) \* 6); 
            int d2 = (int) Math.random()) \* 6); 
            if (d1 == d2) count++; 
    
            } 
            
    System.out.println(count); 
    
    } 

}

Problemet: det som skrivs ut är hur många kast jag har gjort. Inte hur många gånger 2 samma värden som påträffas. Hur fixar jag det? Också - hur gör man när man type castar? Jag är inte helt säker på sånt.

Dels kompilerar inte din kod rätt, eftersom den har fel antal parenteser i Math.random-satserna. Typkonverteringen gör du rätt. Där används (int) för att göra en downcast från double till int.

Jag skrev om ditt lilla program så här (och klippte in det mha code-taggen)

import java.util.Random;

class DiceThrows {
	public static void main(String[] args) {

		int count = 0;

		Random generator = new Random();
		int d1, d2;

		for (int i = 0; i < 1000; i++) {
			d1 = generator.nextInt(6) + 1;
			d2 = generator.nextInt(6) + 1;

			System.out.printf("Throw: %d\tDice 1: %d\tDice 2: %d\n", i, d1, d2);
			if (d1 == d2) {
				System.out.println(" ----------- D1 and D2 equals -----------");
				count++;
			}
		}
		System.out.println(count);

	}

}

Funkar klockrent...

CtrlAltDel skrev:

2.) Jag skulle kolla igenom vad det här programmet gjorde:

private static void printArray(int[] arr) {
for (int i = 0 ; i < arr.length ; i++) {
System.out.print(arr*);
}
System.out.println();
}

public static void main(String\[\] args) { 
    int\[\] lookup = new int\[\]{0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3}; 
    int\[\] data = new int\[\]{4,3,4,2,5,0,4,8,3,2,8,2,7,4,5}; 
    int\[\]\[\] result = new int\[4\]\[9\]; 
    int\[\] count = new int\[4\]; 
    
    for (int i = 0 ; i \< 15 ; i++) { 
        int pos = lookup\[data*\]; 
        result\[pos\]\[count\[pos\]++\] = data*; 
    } 
    
    for (int\[\] i : result) { 
        printArray(i); 
    } 
} 

}

En HEMSKT klöddig array uppgift. Men jag är nära lösningen. Jag fattar inte vad int[] count = new int[4]; är till för dock - och inte heller om databehövs vid result[pos][count[pos]++] = data;
Om någon kan guida mig genom detta också - skulle jag vara väldigt tacksam!

Jag vill bara klara av detta.
Vänliga hälsningar!*****

int[] count = new int[4]; // Denna rad allokerar minne för fyra stycken integers till variabeln count. Den första läggs i count[0] och den sista i count[3].

Och jo, tilldelningen behövs... ;)

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)