我不是很擅长这个,但我正在尝试用Java创建一个程序,它可以从两个对象的参数中创建一个多杂交交叉Punnett正方形,这两个对象是父母。每个参数都是一个字符串,由用户使用扫描仪定义。
这是我拥有的两个对象,为了回答这个问题而进行了修改(它们实际上有七个字符串参数,这些参数是它的遗传特征,它们都是由用户使用scanner填写的)
生物妈妈=新生物(“B,b”);生物爸爸=新生物(“C,c”);
我想用一个for循环在控制台里得到结果" BC,bC,Bc,bc ".
我知道我需要在某个地方使用分隔符或拆分来得到这些结果,但我还没有真正做到这一点。
我已经创建了一个punnett正方形,它包含两个字符串数组,我循环遍历它们,如图所示,
//accept user input
Scanner alleles = new Scanner(System.in);
System.out.println("enter first allele in mother's allele pair: ");
Mom.alleleOne = alleles.nextLine();
System.out.println("enter second allele in mother's allele pair: ");
Mom.alleleTwo = alleles.nextLine();
System.out.println("enter first allele in father's allele pair: ");
Dad.alleleOne = alleles.nextLine();
System.out.println("enter second allele in father's allele pair: ");
Dad.alleleTwo = alleles.nextLine();
//close scanner
alleles.close();
//arrays for parents data
String[] Mother = {Mom.alleleOne, Mom.alleleTwo};
String[] Father = {Dad.alleleOne, Dad.alleleTwo};
//display data
System.out.println("Mother Result: " + Arrays.toString(Mother));
System.out.println("Father Result: " + Arrays.toString(Father));
System.out.println("Possible children: ");
// for loop to cycle through combinations
for (int i = 0; i < Mother.length; i++) {
for (int j = 0; j < Father.length; j++) {
System.out.println(Mother[i] + Father[j]);
}
}//end for
但是我真的认为继续使用对象是我继续这个项目的最好选择。我曾经考虑过使用反射,把一个对象转换成一个字段/参数数组,但是我的脑海中似乎没有任何东西。我希望我的要求是有意义的,如果没有,我道歉。提前感谢你。
1条答案
按热度按时间up9lanfz1#
但我真的认为继续使用对象是我继续这个项目的最好选择。
是的!创建一个costom类并为每个字段生成getter(如果需要)和一个返回所有字段值列表的getter。创建一个方法来计算笛卡尔积(这是你想要对值做什么的正确术语)。从用户那里获取逗号分隔的值并用数据填充你的对象。
附件是一个示例代码,作为一个起点,有三个字段。适应你的想法应该很容易。注意,没有太多的错误处理。你应该考虑如何做到这一点。
对于
a,b,c
和x,y,z
的样本输入,上述公式将产生: