Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Satunnaisia String- arvoja [Java]

Sivun loppuun

Tommittaja [10.01.2009 17:31:05]

#

onko mitään vastaavaa satunnaisfunktiota (int)(Math.random()) tilalle että olisi String arvoja int sijasta? ajattelin nimittäin laittaa tuohon ihan yksinkertaiseen kivi, sakset, paperi yms. ohjelmaan vastustajan..

edit: vai laittaisiko vain yksinkertaisesti että:

int vasta = (int)(3*Math.random())
     if (vasta == 0 && arvaus.equals("kivi")) {
          System.out.print("pelaaja 1 voitti!");
     }

tyyliin, koska eihän se peli niitä vastapelaajan liikkeitä tulostaisi, mutta olisi vain selkeämpää..

jlaire [10.01.2009 18:05:27]

#

Tommittaja kirjoitti:

onko mitään vastaavaa satunnaisfunktiota (int)(Math.random()) tilalle että olisi String arvoja int sijasta?

Miten se voisi tietää, millaisia merkkijonoja pitää generoida?

Laita kaikki erilaiset merkkijonot taulukkoon ja ota sieltä satunnainen jäsen:

String[] merkkijonot = {"kivi", "paperi", "sakset"};
String s = merkkijonot[(int)(merkkijonot.length * Math.random())];

Tommittaja kirjoitti:

eihän se peli niitä vastapelaajan liikkeitä tulostaisi

Sittenhän voit saman tien jättää käyttäjän valinnan huomiotta ja arpoa lopputuloksen.

Tommittaja [10.01.2009 18:14:20]

#

ok.. taidan siis pysyä tuossa normi inteissä...

Tommittaja [10.01.2009 19:49:30]

#

no kysytään sitten tuota yksinkertaisemmin: voiko tehdä math.random funktion tilalle char satunnais merkkejä esim. alkaa ASCII- merkistön merkistä 1 merkkiin 6...

Metabolix [10.01.2009 19:59:32]

#

Voit ihan itse tehdä sellaisen. Edellistä esimerkkiä mukaillen se onnistuisi näin:

String [] palat = {"a", "b", "c"};
Integer paloja_tulokseen = 5;
String tulos = "";
Integer i;
for (i = 0; i < paloja_tulokseen; ++i) {
  tulos = tulos + palat[(int)(Math.random() * palat.length)];
}

Sami [13.01.2009 21:28:56]

#

Jos haluaa satunnaisia merkkejä, niin siihen on useampiakin tapoja. Alla on kolme mahdollista tapaa, joista ensimmäinen on kaikkein selkein ja se ei edellytä, että merkit joista arvotaan olisivat peräkkäisiä ascii-merkkejä.

public class Tmp {
	// Lopputulos on sama kuin olisi kirjoittanut merkit = new char[]{'a', 'b', ..., 'z'};
	static char[] merkit = "abcdefghijklmnopqrstuvwxyz".toCharArray();

	public static void main(String[] args) {
		char merkki;

		// Valitaan satunnainen merkki taulukosta
		merkki = merkit[(int)(Math.random() * merkit.length)];
		System.out.println(merkki);

		// Mikäs siinä... merkeillä on ascii-arvo ja niillä voi laskea myös
		// jos huvittaa...
		merkki = (char)(Math.random() * ('z' - 'a' + 1) + 'a');
		System.out.println(merkki);

		// Muuten sama kuin edellä, paitsi että merkit on muutettu etukäteen
		// ascii-arvoikseen.
		merkki = (char)(Math.random() * 26 + 97);
		System.out.println(merkki);
	}
}

Tapoja siis on, mutta se on makuasia kuinka luettavana/selkeänä haluaa pitää koodinsa. :)

Jackal von ÖRF [13.01.2009 21:44:05]

#

Tässä yksi tapa lisää, jos satunnainen on liian satunnaista: http://kaioa.com/node/53 (eri kielillä: http://kaioa.com/node/89)

Tommittaja [14.01.2009 09:37:19]

#

satunnainen ei ole koskaan liian satunnaista... :D

Jackal von ÖRF [14.01.2009 12:10:54]

#

On esimerkiksi Tetriksessä, kuten tuon linkin takana kerrotaan. ;)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta