You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中遍历两个对象参数生成所有组合实现多基因杂交庞尼特方格

多基因杂交庞尼特方格的Java实现方案

1. 重构Creature类,封装基因处理逻辑

不用反射,直接在Creature类里处理基因的拆分与存储,既符合面向对象的封装原则,也更易维护。

import java.util.Arrays;
import java.util.List;

public class Creature {
    private List<String> genes;

    // 构造函数:接收逗号分隔的基因字符串(如"B,b")
    public Creature(String geneStr) {
        // 分割字符串并转成List,自动忽略输入中可能存在的空格
        this.genes = Arrays.asList(geneStr.split("\\s*,\\s*"));
    }

    // 获取拆分后的基因列表
    public List<String> getGenes() {
        return genes;
    }
}

2. 实现杂交组合逻辑

通过双重循环遍历两个Creature的基因列表,生成所有可能的基因组合,最后拼接成目标格式输出。

import java.util.Scanner;

public class PunnettSquareGenerator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 获取用户输入的父代基因
        System.out.print("请输入母代基因(格式如B,b):");
        String momGeneStr = scanner.nextLine();
        System.out.print("请输入父代基因(格式如C,c):");
        String dadGeneStr = scanner.nextLine();

        Creature mom = new Creature(momGeneStr);
        Creature dad = new Creature(dadGeneStr);

        // 生成所有基因组合
        StringBuilder result = new StringBuilder();
        for (String momGene : mom.getGenes()) {
            for (String dadGene : dad.getGenes()) {
                if (result.length() > 0) {
                    result.append(", ");
                }
                result.append(momGene).append(dadGene);
            }
        }

        // 输出最终结果
        System.out.println(result.toString());
        scanner.close();
    }
}

3. 多基因扩展方案

如果后续需要支持多对基因(比如同时处理Bb和Cc两对,输入格式为"B,b,C,c"),可以新增基因对拆分逻辑,再生成笛卡尔积组合:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

// 新增辅助方法拆分基因对
private static List<List<String>> splitIntoGenePairs(List<String> genes) {
    List<List<String>> pairs = new ArrayList<>();
    // 按顺序每两个基因组成一对
    for (int i = 0; i < genes.size(); i += 2) {
        pairs.add(Arrays.asList(genes.get(i), genes.get(i+1)));
    }
    return pairs;
}

之后通过嵌套循环(或递归)遍历所有基因对的组合,即可生成多基因杂交的庞尼特方格结果。

关于反射的说明

你的场景完全不需要反射——反射多用于动态访问未知类的字段,而Creature的核心数据是基因字符串,直接封装拆分和获取方法,比反射更简单、安全,也更符合面向对象的设计逻辑:类自身管理并暴露数据,而非外部通过反射强行读取。

内容的提问来源于stack exchange,提问作者este

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:02:06