我写了一个代码,其目的是为人口提供样本。 例如,如果我给出一个包含四个元素(0,1,2,3)的总体,并且样本由1个元素组成,则输出将是 0 1 2 3 每个值都印在JOptionPane上。
如果样本由两个元素组成,则输出为: 00 01 02 03 10 11 12 13 20 21 23 三十 31 32 33
如果saples由三个元素组成,则输出为: 000 001 002 003 010 011 012 013等等
我递归地编写了这个程序,因此可以为每个样本的维度运行。
当它应该在JOptionPane上打印值(包含在向量中)时程序停止,我无法理解动机。这是代码:
import java.util.Vector;
import javax.swing.JOptionPane;
public class Combo {
/**
* Function that recursively prints samples
* @param n size of samples
* @param popolazione elements of the population
* @param combinazione the vector that contains the uncomplete sample
*/
public static void stampa(int n, Vector<Integer> popolazione, Vector<Integer> combinazione){
// exit condition, when n equals 0 the function doesn't self-calls
if(n==0) JOptionPane.showMessageDialog(null, combinazione);
// for every element of the population the function adds this element
// at the previous combination
for(int x = 0; x<popolazione.size();x++){
Vector<Integer> aggiunta = new Vector<Integer>(combinazione);
aggiunta.add(x);
stampa(n-1, popolazione, aggiunta);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// creation a vector population with 4 elements
Vector<Integer> popolazione = new Vector<Integer>();
for(int x = 0; x < 4; x++) popolazione.add(x);
// creation of samples
stampa(1, popolazione, new Vector<Integer>());
}
}
哪里可能是我的错误?
答案 0 :(得分:1)
在您的方法stampa()
中,我相信您想要更改此
if(n==0) JOptionPane.showMessageDialog(null, combinazione);
到这个
if (n < 1) {
JOptionPane.showMessageDialog(null,
combinazione.get(n));
return;
}