2012-11-07 185 views
0

我想从java.i中所需的概率数组字符串列表生成随机字符串,但不知道如何处理概率。我必须运行程序差不多25-30次从具有一定概率的字符串列表生成随机字符串

Probability for abc is 10% 
      for def is 60% 
      for ghi is 20% 
      for danny is 10% 

但我无法做到这一点。

import java.util.*; 

public class newyork 
{ 
public static void main(String[]args) throws Exception 
{ 
    // othr fun 
    public static void abc() 
    { 
    //Strings to display 
     String [] random = {"abc","def", "ghi","danny"}; 
    //Pick one by one 
     String no1= random[(int) (Math.random()*(random.length))]; 
     String no2 = random[(int) (Math.random()*(random.length))]; 
     String no3 = random[(int) (Math.random()*(random.length))]; 

    //print randomly generated strings 
     System.out.println("Here you go : " + no1 + " " + no2 + " " + no3 + "); 
    } 
+0

所以,你想要随机字符串,基于'概率'。这意味着可能性越高,选择的时间越长。什么是随机的? –

+1

你的代码在哪里使用了加权概率?为了它的工作,你应该尽量做*东西*与他们至少.. – Patrick

+0

这是我不知道如何编写概率代码的主要事情.. – user1806895

回答

2

基本上,使用概率,则生成在0和100之间的随机数,不包括100

然后,测试每个依次串,将所述概率:

String s; 
if (number < 10) {s = "abc";} 
else if (number < 70) { s = "def";} 
else if (number < 90) {s = "ghi";} 
else {s = "danny";} 
1

这可能不是最好的解决办法:

int number = (int) Math.random() * 100; 
String myString; 
if(number <= 10) 
    myString = "abc"; 
else if(number <= 20) 
    myString = "danny"; 
else if(number <= 40) 
    myString = "ghi"; 
else 
    myString = "def"; 

所以,从0:1 0返回abc,10:20返回danny,20:40返回ghi,40:100返回def。 该解决方案将是可怕的多串/百分比,我相信,有以这样一种更好的方式,但不记得

2

伪代码(这是在我的舌尖。):

Generate a random integer n between 0 and 9 
if (n==0)  return "abc" 
else if (n <= 6) return "def" 
else if (n <= 8) return "ghi" 
else    return "danny" 

有很多方法可以做到这一点