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ää..
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.
ok.. taidan siis pysyä tuossa normi inteissä...
no kysytään sitten tuota yksinkertaisemmin: voiko tehdä math.random funktion tilalle char satunnais merkkejä esim. alkaa ASCII- merkistön merkistä 1 merkkiin 6...
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)]; }
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. :)
Tässä yksi tapa lisää, jos satunnainen on liian satunnaista: http://kaioa.com/node/53 (eri kielillä: http://kaioa.com/node/89)
satunnainen ei ole koskaan liian satunnaista... :D
On esimerkiksi Tetriksessä, kuten tuon linkin takana kerrotaan. ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.