Java 从数据生成随机数

Java 从数据生成随机数,java,Java,我有一个数据数组列表,里面填充了我打开的一个文件中的数字,我想通过输入样本的大小和我想要的样本数,从中生成随机数。所以我有以下几点 private JTextField jtfN = new JTextField();// where i enter the amount of samples private JTextField jtfn = new JTextField();// where i enter the size of samples private ArrayList<

我有一个数据数组列表,里面填充了我打开的一个文件中的数字,我想通过输入样本的大小和我想要的样本数,从中生成随机数。所以我有以下几点

private JTextField jtfN = new JTextField();// where i enter the amount of samples
private JTextField jtfn = new JTextField();// where i enter the size of samples
private ArrayList< Double> data = new ArrayList< Double>();
private JTextField jtfN=new JTextField();//在此处输入样本数量
私有JTextField jtfn=新JTextField();//在此处输入样本的大小
私有ArrayList数据=新ArrayList();
我有两个文本字段,一个名为jtfn(样本大小),一个名为jtfn(样本数量) 这是我输入值的地方。然后,我有一个名为jbtnGenerate whch的按钮,当我单击时,我希望它从上面输入了jtfn和jtfn的数据生成随机数,然后将它放在名为jta的文本区域中

这就是我打开文件并将数字添加到数据中的地方

if( jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) {

String file = jfc.getSelectedFile().getPath();
String line = null;
String[] ch;

try {   
    FileReader fr = new FileReader( file);
    BufferedReader br = new BufferedReader(fr);
    data.clear();
    while( (ligne=br.readLine())!=null ) {
        ch = line.split( ";" );
        for (int i = 0; i < ch.length; i++) {
            data.add( Double.parseDouble(ch[i]) );  
        }                       
    }

    br.close();             
}
catch( IOException ioe ) {
}           
if(jfc.showOpenDialog(this)=JFileChooser.APPROVE\u选项){
字符串文件=jfc.getSelectedFile().getPath();
字符串行=null;
字符串[]ch;
试试{
FileReader fr=新的FileReader(文件);
BufferedReader br=新的BufferedReader(fr);
data.clear();
而((ligne=br.readLine())!=null){
ch=行分割(“;”);
for(int i=0;i
}

这是我的“生成”按钮的侦听器,我希望在其中执行操作

       jbtnGenerer.addActionListener( new ActionListener() {
        public void actionPerformed( ActionEvent ae ) {

            try {                   

             int sampSize = Integer.parseInt(jtfn.getText());
             int nSamples = Integer.parseInt(jtfN.getText());

            double samps[][] = new double[nSamples][sampSize];

            for(int i = 0 ; i < nSamples; i++){
                for(int j = 0 ; j < sampSize; j++)
                    samps[i][j] = (Double) data.toArray()[ rng.nextInt() % data.size() ];
              }


                jta.append(samps.toString());

            } catch (NumberFormatException e) {

            }
        }

    });
jbtngener.addActionListener(新ActionListener(){
已执行的公共无效行动(行动事件ae){
试试{
int-sampSize=Integer.parseInt(jtfn.getText());
int nSamples=Integer.parseInt(jtfN.getText());
双样本[][]=新的双样本[nSamples][sampSize];
对于(int i=0;i

感谢您的帮助

代码中没有真正的随机数,但是有伪随机数生成器。为了生成整数并创建样本组,您需要创建一个随机对象。您必须首先导入它:

    import java.util.Random;
然后,您必须创建它,并在函数中为它添加种子。最常用的种子是以毫秒为单位的当前时间:

    Random rng = new Random( System.currentTimeMillis() );
我猜您应该首先解析输入,比如

    int sampSize;
    int nSamples;
    if( !jtfn.getText().isEmpty() )
     sampSize = Integer.parseInt(jtfn.getText());
    if( !jtfN.getText().isEmpty() )
     nSamples = Integer.parseInt(jtfN.getText());
那你得做些东西来装你的样品。一个二维数组就可以了

    double samps[][] = new double[nSamples][sampSize];
从这里开始,您需要填充样本组数组。单个循环可以正常工作,但为了可读性起见,这里有一个嵌套的for循环:

    for(int i = 0 ; i < nSamples; i++){
      for(int j = 0 ; j < sampSize; j++)
        samps[i][j] = data.get( rng.nextInt(data.size()) );
    }
for(int i=0;i

其中rand()是您的语言将使用的RNG函数。从那里,您将拥有一个N x N大小的数组,其中填充了样本。

我绝对不会这样命名您的变量。。。很容易产生bug。我完全被jtfn和jtfn的含义所迷惑。为了澄清起见,看起来你想从数据中抽取N个双精度的N个样本,对吗?@Peter,我猜Java文本字段,它们捕获的变量是
N
N
。但这并不正确……它们是我输入值的文本字段。jtfn是我设置样本大小的地方,jtfn是我设置想要采集的样本数量的地方。这些数字是从数据中提取的,它是一个双精度的数组列表,当我试图添加它给我的数据[rand()%data.length];长度无法解析或不是字段,我也无法将它们解析为int,因为它们是文本字段。我更新了我的答案。当然,这假设数据已经填充了双精度。编辑:从更新后的问题判断,看起来你是这样做的。我在主要答案中添加了更多信息,是的,当我打开文件时,它会向数据中添加两倍的信息,但由于某种原因,这一个给了我错误samps[I][j]=data.toArray()[rand()%data.length];我尝试将其转换为双精度,并将长度更改为size samps[I][j]=(双精度)data.toArray()[rand()*data.size()];错误是新类型ActionListener的rand未定义对此表示抱歉。再次更新以讨论
随机
对象以及如何从中生成整数。希望这有用
System.currentTimeMillis()
以毫秒为单位返回当前时间。