【问题标题】:Run functions inside for loop [closed]在for循环内运行函数[关闭]
【发布时间】:2013-02-18 13:03:19
【问题描述】:

我想多次运行我的函数并获得不同的答案(因为它处理随机数),并从所有可能的答案中获得最小值。但是该函数总是返回相同的值。如何纠正循环以每次得到不同的答案并找到它们的最小值? 这是我的代码

    int n = 0;
    KargerMinimumCut karger = new KargerMinimumCut();
    ArrayList<Integer> answers = new ArrayList<Integer>();
    for(int i = 0; i < 10; i++) {
        n = karger.minCut(vertices);
        answers.add(n);
    }
    int min = minimum(answers);
    System.out.println("Minimum Number is: " + min);

最小函数

public static int minimum(ArrayList<Integer> array) {
    int min = array.get(0);
    for(int i = 1; i < array.size(); i++) {
        if(array.get(i) < min)
            min = array.get(i);
    }
    return min;
}

【问题讨论】:

  • 随机性在哪里?
  • 随机性在 minCut 函数内部。当我运行它时它返回不同的答案,但在循环内它总是返回相同的答案
  • 想向我们展示 minCut 方法吗?
  • 恐怕你需要展示“minCut”方法的实现——因为它代表“minimum”方法看起来不错,所以问题可能出在其他地方
  • minCut 函数很长很复杂,这里就不贴了价值

标签: java function random


【解决方案1】:

编辑:

好的,在看到您的算法之后,您需要执行此操作。 (顺便说一下,我会使用一个简单的二维整数数组)。

int min = Integer.MAX_VALUE;
KargerMinimumCut karger = new KargerMinimumCut();
for(int i = 0; i < 10; i++) {
    int cut = karger.minCut(copyOfVertices(vertices));
    System.err.println(cut);
    min = Math.min(min,cut);
}
System.out.println("Minimum Number is: " + min);

.

public ArrayList<ArrayList<Integer>> copyOfVertices(ArrayList<ArrayList<Integer>> vertices) {
  ArrayList<ArrayList<Integer>> copy = new ArrayList<ArrayList<Integer>>();
  int size = vertices.size();
  for (int i=0; i<size; i++) {
    int innerSize = vertices.get(i).size();
    ArrayList<Integer> row = new ArrayList<Integer>();
    for (int j=0; j<innerSize; j++) {
      row.add(new Integer(vertices.get(i).get(j)));
    }
    copy.add(row);
  }
  return copy;
}

【讨论】:

  • 谢谢!但是我怎样才能看到在每次迭代期间返回 minCut 的值是什么?
  • 我编辑了我的答案,您实际上不需要打印出顶点,但如果需要,您可以。
  • 非常感谢!我试过这个,它打印了 10 次相同的 cut 值 :( 有趣的是,当我在循环之外运行它时,每次运行我都会得到不同的答案
  • 向我们展示您的 minCut 方法,我们已经在 OP 中告诉过您。
  • 再次编辑,试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多