Java中的多步骤转换

Java中的多步骤转换,java,Java,如果标题有误导性,我很抱歉,但我真的不确定如何描述它。我正试图用Java编写一个程序来转换数据,只考虑一些转换因子。例如,如果我有这些换算系数: 将a乘以10,将a转换为b 将b乘以20,将b转换为c 将c除以200,将c转换为a 如何编写一个将a转换为c的方法?我知道必须先将a转换为b,然后将b转换为c,但我不知道如何教Java识别这样的模式。我知道我可以直接写if语句来检查这些,但是,我有很多这样的转换,所有这些if语句看起来效率非常低。有更好的方法吗?您可以将此问题建模为图形搜索问题。将每

如果标题有误导性,我很抱歉,但我真的不确定如何描述它。我正试图用Java编写一个程序来转换数据,只考虑一些转换因子。例如,如果我有这些换算系数:

将a乘以10,将a转换为b 将b乘以20,将b转换为c 将c除以200,将c转换为a
如何编写一个将a转换为c的方法?我知道必须先将a转换为b,然后将b转换为c,但我不知道如何教Java识别这样的模式。我知道我可以直接写if语句来检查这些,但是,我有很多这样的转换,所有这些if语句看起来效率非常低。有更好的方法吗?

您可以将此问题建模为图形搜索问题。将每个a、b和c建模为一个节点。如果可以将u转换为v,则在节点u和v之间创建定向边

使用此图,您可以通过简单地查找从x到y的路径来找到将x转换为y的方法。您可以使用标准的最短路径算法(如Dijkstra算法)来查找此类路径。

您可以构建一个。两个节点之间的每个弧都是一个变换。最后,您需要运行一个算法,如找到将x转换为y的最短方法

这是一个很好的例子,答案提供了图形和Dijkstra算法在Java中的链接和实现


编辑:似乎有人也提出了同样的想法:

如何确定是否需要从a->b、a->b->c或c->a->b转换?为什么不将规则从c转换为a乘以200,而不是将c除以200。这需要更少的步骤。