首页 > 解决方案 > 从方法中获取返回值以在for循环中使用

问题描述

这是基本的,但我找不到答案...我在我的 Main 类中使用 3 个参数调用方法 Kmeans(centers, dataset, k)。该方法返回中心。如何在另一个类中使用中心的返回循环?

从主类调用方法...

concurrentKmeans(centers, dataset, k);

方法...

public static List<TockaXY> kmeans(List<TockaXY> centers, List<TockaXY> dataset, int k) {
      boolean converged;
      do {
          List<TockaXY> noviCentri = noviCentri(dataset, centers);
          double dist = dobiRazdaljoCenters(centers, noviCentri);
          centers = noviCentri;
          converged = dist == 0;
      } while (!converged);
      return centers;
  }

尝试在 for 循环中使用它来迭代List<TockaXY> ...

public class WebviewLoadListner implements ChangeListener<State>{

    @Override
    public void changed(ObservableValue<? extends State> observable, State from, State to) {
        if (to == State.SUCCEEDED)
        {
            SampleController.engine.executeScript("jumpTo("+46.641389+","+49.756667+","+10+")");
            for(int i =0; i<Main.kmeans(centers, dataset, k); i++){

            }

        }     
    }

}

标签: javaarraysmethodsparameter-passing

解决方案


更好的方法是调用该方法并将其设置为局部变量,然后在 for 循环中使用它。在 for 循环条件中使用函数调用并不理想,因为每次对其进行评估时,每次循环迭代都会调用相同的函数,这会影响性能。

SampleController.engine.executeScript("jumpTo("+46.641389+","+49.756667+","+10+")");

List<TockaXY> list = Main.kmeans(centers, dataset, k);
for(int i =0; i< list.size(); i++){
    //Use list.get(i) for each individual element in the list
}

或者

List<TockaXY> list = Main.kmeans(centers, dataset, k);
for(TockaXY toc : list) {
    //toc will give individual element in the list
}

使用 JDK 8,我们可以使用流来访问元素

List<TockaXY> list = Main.kmeans(centers, dataset, k);
list.stream().forEach(toc -> {
   //Your operation with toc
});

推荐阅读