Java 制作一个方法,将不同的方法分别放在一个for循环中?

Java 制作一个方法,将不同的方法分别放在一个for循环中?,java,for-loop,methods,parameters,Java,For Loop,Methods,Parameters,在一个类中,我有很多算法方法,它们中的每一个都需要分别放在同一个for循环中。就像我每次处理算法方法时都需要写一个for循环。 我正在尝试制作一个类似于for loop的方法,并且可以修改这些算法方法的参数。这样,我不需要多次编写for循环,程序也会更小:) 但是当我试着像普通的方法那样做的时候,它不起作用,因为它可能会错误地使用该方法中那些算法方法的参数 这是循环常数的示例 for(int i = 0; i < 19; i++){ for(int j = 0;

在一个类中,我有很多算法方法,它们中的每一个都需要分别放在同一个for循环中。就像我每次处理算法方法时都需要写一个for循环。 我正在尝试制作一个类似于for loop的方法,并且可以修改这些算法方法的参数。这样,我不需要多次编写for循环,程序也会更小:) 但是当我试着像普通的方法那样做的时候,它不起作用,因为它可能会错误地使用该方法中那些算法方法的参数


这是循环常数的示例

    for(int i = 0; i < 19; i++){
        for(int j = 0; j < 19; j++){
            if(Main.index[i][j] == "+ "){
               if(Main.winner == "")
                    sampleMethod();
            }   
        }
    }
public static void AISteps(AI s){
    for(int i = 0; i < 19; i++){
        for(int j = 0; j < 19; j++){
            if(Main.index[i][j] == "+ "){
               if(Main.winner == "")
                    s();
            }   
        }
    }
}

任何人都能找到达到目的的方法吗?谢谢你

Java中的对象不可直接调用。您需要在实例上调用一个方法:

s.aiMethod();
如果要将方法作为参数传递,则需要使用方法引用。方法引用允许您将方法强制转换为具有单个方法的接口,只要返回类型和参数兼容

在这种情况下,您可以使用
java.lang.Runnable
接口:

public interface Runnable {
    public abstract void run();
}
您可以重构方法以轻松接受方法引用:

public static void AISteps(Runnable method){
    for(int i = 0; i < 19; i++){
        for(int j = 0; j < 19; j++){
            if(Main.index[i][j] == "+ "){
               if(Main.winner == "")
                    method.run();
            }   
        }
    }
}
如果方法是实例方法,则同样的规则适用:

AIClass myAIClass = ...;
AISteps(myAIClass::someMethod);

在Java中,对象不能直接调用。您需要在实例上调用一个方法:

s.aiMethod();
如果要将方法作为参数传递,则需要使用方法引用。方法引用允许您将方法强制转换为具有单个方法的接口,只要返回类型和参数兼容

在这种情况下,您可以使用
java.lang.Runnable
接口:

public interface Runnable {
    public abstract void run();
}
您可以重构方法以轻松接受方法引用:

public static void AISteps(Runnable method){
    for(int i = 0; i < 19; i++){
        for(int j = 0; j < 19; j++){
            if(Main.index[i][j] == "+ "){
               if(Main.winner == "")
                    method.run();
            }   
        }
    }
}
如果方法是实例方法,则同样的规则适用:

AIClass myAIClass = ...;
AISteps(myAIClass::someMethod);

您是否考虑过将
lambdas
传递给您的方法并调用它们?下面是一个简单的例子

publicstaticvoidmain(字符串[]args){
AISteps(()->System.out.println(“Doit!”);
AISteps(()->System.out.println(“完成”);
}
公共静态无效AISteps(可运行fnc){
对于(int i=0;i<2;i++){
对于(int j=0;j<2;j++){
///在这里做一些处理
fnc.run();
}
}
}

阅读函数引用和lambda,查看您可以使用的各种选项。

您是否考虑过将
lambda
传递给您的方法并调用它们?下面是一个简单的例子

publicstaticvoidmain(字符串[]args){
AISteps(()->System.out.println(“Doit!”);
AISteps(()->System.out.println(“完成”);
}
公共静态无效AISteps(可运行fnc){
对于(int i=0;i<2;i++){
对于(int j=0;j<2;j++){
///在这里做一些处理
fnc.run();
}
}
}

阅读功能参考和lambda,查看您可以使用的各种选项。

噢!这就是它抛出错误的原因。然而,我试图不在for循环方法中放入特定的方法名。我试图在其中放入一些变量,这样我就可以在不重写for循环的情况下调用其中的任何方法。这就是问题所在>@ZhibinChen我更新了答案。希望这能解决你的问题issue@ZhibinChen请注意,这与WJS的答案类似。lambda也被转换为单个方法接口,就像方法引用一样。哦!这就是它抛出错误的原因。然而,我试图不在for循环方法中放入特定的方法名。我试图在其中放入一些变量,这样我就可以在不重写for循环的情况下调用其中的任何方法。这就是问题所在>@ZhibinChen我更新了答案。希望这能解决你的问题issue@ZhibinChen请注意,这与WJS的答案类似。lambda也被转换为单个方法接口,就像方法引用一样。听起来很酷!因为我不熟悉lambda,所以我要先查一下。听起来很酷!因为我不熟悉lambda,所以我将首先查找一下。