【问题标题】:Java Algorithms: comparing each *thing* to every other [closed]Java算法:将每个*事物*相互比较[关闭]
【发布时间】:2015-01-03 22:52:30
【问题描述】:

我正在创建一个程序,该程序要求我将每个名为 a,b,c,d,e,f,g,h,i,j 的 int 项目相互比较。我知道,从概念上讲,算法必须如下所示:

  • a-b a-c a-d a-e a-f a-g ...
  • b-c b-d b-e b-f b-g ...
  • c-d c-e c-f c-g ...
  • 等等……

我的问题是实现这个没有字面上写出所有的东西。我考虑过使用“for”循环,但我不知道如何以“模块化”方式引用变量名。

如果需要更多解释,请告诉我,提前致谢!

编辑:Karlphilip 的评论对我帮助很大

【问题讨论】:

标签: java algorithm for-loop


【解决方案1】:

您可以将您的项目放入一个数组中,并使用两个嵌套循环来获取所有对,如下所示:

int[] x = new int[] {a, b, c, d, e, f, g, h, i};
for (int i = 0 ; i != x.length ; i++ ) {
    for (int j = i+1 ; j != x.length ; j++ ) {
        ... // Use x[i] and x[j] here
    }
}

【讨论】:

  • 相当肯定使用 != x.length 是个坏主意...尝试用
  • @BenKnoble 您认为i 将从0 变为使谓词i < x.length 为假而不经过x.length 的值?
  • @BenKnoble 在这种特殊情况下,这是安全的。一般来说,我更喜欢!= 而不是<,遵循 Dijkstra 在“编程学科”中的论点(他认为这可以让你使用最强的后置条件)。
  • @PascalCuoq 如果 i >= x.length 导致退出并且 i 从 0 开始递增 1,当循环终止时 i 将为 x.length,导致 i 被垃圾收集器回收。实际上,永远不会在循环体中用作 x.length 。不过,我对你问题的措辞有点困惑?
  • 如果不仔细检查,循环会出现问题。这是我们都可以同意的:P
【解决方案2】:

要将每个项目与数字“数组”或“列表”中的每个其他项目进行比较,您需要将一个 for 循环嵌套在另一个中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2013-01-24
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多