gpt4 book ai didi

java - 如何优雅地以各种顺序调用方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:07 25 4
gpt4 key购买 nike

我有四种方法:

right();
up();
left();
down();

然后我按以下方式调用它们:

result = right();
if checkResult(result)
return(result);

result = up();
if checkResult(result)
return(result);

result = left();
if checkResult(result)
return(result);

result = down();
if checkResult(result)
return(result);

所以这是优先事项。我知道其中之一会起作用。但我需要根据优先级检查它:[right, up, left, down]

现在,诀窍是:我的优先级会随着时间而改变。确切地说,这取决于之前的举动。所以:

if previous move was up(), then priority is [right, up, left, down]
if previous move was left(), then priority is [up, left, down, right]
if previous move was down(), then priority is [left, down, right, up]

所以你可以清楚地看到这里的逻辑。问题是:如何调用给定(可变)优先级的函数?

显然,我可以只执行切换和复制粘贴调用 block ,但这很丑陋。那么这是一种优雅的方式吗?

再者,Java和Python的方法是什么?

最佳答案

我会为方法分配整数 ID,例如:

right() - 0
up() - 1
left() - 2
down() - 3

我会将 previousMove 存储为一个整数,该整数与调用的最后一个方法相对应。因此,无论何时调用 up(),previousMove 都等于 1,等等。(您可以根据需要的逻辑在任何需要的地方进行设置)

然后我会循环如下:

public class Test {
public static void main(String[] args) {
int previousMove = 3; //Change this to test

int startMethod = previousMove - 1 < 0 ? 3 : previousMove - 1; //Represents the ID of the method before the previousMove, accounting for negative values and wrapping around
int offset = startMethod - 1 < 0 ? 3 : startMethod - 1; //Represents the ID of the method before the startMethod, accounting for negative values and wrapping around

for (int i = startMethod; true; i++) {
if (i > 3) i = 0; //Wrap around
switch (i) {
case 0: right(); break;
case 1: up(); break;
case 2: left(); break;
case 3: down(); break;
}
if (i == offset) break; //Break once all 4 methods have been called
}
}

private static void right() {
System.out.println("Calling right");
}

private static void up() {
System.out.println("Calling up");
}

private static void left() {
System.out.println("Calling left");
}

private static void down() {
System.out.println("Calling down");
}
}

previousMove = 3(向下)的输出:

Calling left
Calling down
Calling right
Calling up

解释:我们从 startMethod(previousMove 之前的一个)一直循环到 4 个方法,直到调用完所有方法。因此,如果您的“前一步”是 left() 方法,例如,您可以将 previousMove 设置为 2,并且循环将根据需要调用第 1、第 2、第 3 和第 4 种方法。

一开始你可能很难理解整数,但我可以向你保证,通过尝试理解上面的代码,而不是仅仅将其复制粘贴到你的程序中,你会受益匪浅:)

关于java - 如何优雅地以各种顺序调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com