Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正确的处理方法;检查表“;项目数量_Java_Oop_Data Structures - Fatal编程技术网

Java 正确的处理方法;检查表“;项目数量

Java 正确的处理方法;检查表“;项目数量,java,oop,data-structures,Java,Oop,Data Structures,我有一个必须完成一系列任务的流程。流程可能会尝试已完成的任务,在这种情况下,它应该忽略该尝试并生成完成另一个任务的请求。我不确定有什么好方法可以跟踪哪些任务已经完成,哪些仍然需要处理 我将以游戏“Yahtzee”为例来演示我目前如何处理这个问题。我首先创建任务列表,在本例中为评分组合: combinations = new ArrayList<String>(); combinations.add("one"); combinations.add("two"); ... combin

我有一个必须完成一系列任务的流程。流程可能会尝试已完成的任务,在这种情况下,它应该忽略该尝试并生成完成另一个任务的请求。我不确定有什么好方法可以跟踪哪些任务已经完成,哪些仍然需要处理

我将以游戏“Yahtzee”为例来演示我目前如何处理这个问题。我首先创建任务列表,在本例中为评分组合:

combinations = new ArrayList<String>();
combinations.add("one");
combinations.add("two");
...
combinations.add("fullhouse");
combinations.add("smallstraight");
combinations.add("yahtzee");
...
combines=newarraylist();
组合。添加(“一”);
组合。添加(“两个”);
...
组合。添加(“全屋”);
组合。添加(“SmallStright”);
组合。添加(“yahtzee”);
...
当玩家使用其中一种组合时,我会将其从arraylist中删除,在本例中为“小直”组合:

public void selectSmallStraight() {
    int index = combinations.indexOf("smallstraight");
    if(index < 0)
        System.out.println("Small Straight already used");
        //Prompt the player for another selection
    else
        combinations.remove(index);
        score += 30;
}
public void selectsmallstraint(){
int index=combines.indexOf(“smallstraight”);
如果(指数<0)
System.out.println(“已使用的小型直线”);
//提示玩家进行其他选择
其他的
组合。删除(索引);
分数+=30分;
}
一旦所有的组合都被使用,游戏就结束了


对我来说,使用数组列表似乎非常原始,更不用说丑陋了。我曾考虑过使用
贴图,然后在使用对象后将其标记为false,但我认为已经有了一些“标准”的方法,可以更优雅地完成此操作。

如果原始解决方案有效,那么这通常是最好的解决方案。为什么要把它弄得更复杂

仅使用
ArrayList
的唯一缺点是搜索速度慢。使用
Map
进行此操作会更好


但如果您创建了一个知道是否已经使用过的类并将其放入映射中,则可能会更好。

如果原始解决方案有效,那么这通常是最好的解决方案。为什么要把它弄得更复杂

仅使用
ArrayList
的唯一缺点是搜索速度慢。使用
Map
进行此操作会更好


但是,如果您创建了一个知道是否已经使用过的类并将其放入映射中,可能会更好。

您的arraylist示例对于您正在执行的操作来说可能有点效率低下,并且可能会意外地键入错误的操作。如果您有一组操作,为什么不将它们保留在布尔数组中

final static int FIRSTACTION = 0;
final static int SECONDACTION = 1;
final static int LASTACTION = 2;
boolean[] actionsFinished = new boolean[3];
完成后即可进行设置:

//Do first action code goes here
actionsFinished[FIRSTACTION] = true;

您的arraylist示例对于您所做的工作可能有点效率低下,并且可能会意外地键入错误的操作。如果您有一组操作,为什么不将它们保留在布尔数组中

final static int FIRSTACTION = 0;
final static int SECONDACTION = 1;
final static int LASTACTION = 2;
boolean[] actionsFinished = new boolean[3];
完成后即可进行设置:

//Do first action code goes here
actionsFinished[FIRSTACTION] = true;

我对ArrayList方法的主要问题是性能,正如您所说的那样。@Kededro所以依赖HashMap的HashSet可以完成这项工作我对ArrayList方法的主要问题是性能,正如您所说的那样。@Kededro所以依赖HashMap的HashSet可以完成这项工作