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.