草庐IT

java - TicTacToe minimax 算法在 4x4 游戏中返回意外结果

在我的方法newminimax499中,我有一个利用内存和alphabeta修剪的minimax算法。该方法通常适用于3x3游戏,但是当我玩4x4游戏时,我会得到奇怪的、意想不到的计算机位置选择。他仍然从不输,但他似乎并不是为了赢而比赛。为了说明这里的问题,我们使用2个3x3和4x4游戏的场景。首先是一个3x3游戏的场景,其中玩家是X并迈出第一步:这还不错,事实上,这正是人们希望计算机执行的操作。现在来看一个4x4游戏的场景。同样,O是计算机,X启动:如您所见,计算机只是将Os一个接一个地按系统顺序排列,只有在它有可能获胜时才打破该顺序来阻止X。这是非常防守的打法,不像在3x3比赛中看

java - 是否有更高效的 Java 8 Stream 方法来查找 int[] 中的索引?

基于BlackJackQuestion,我想知道如何指示所有获胜的手。实际上,最初的问题只是询问两个不大于21的数字中的最大值。所以像这样的方法publicintblackjack(inta,intb);但是,如果有人希望返回所有获胜的手(假设输入数组中的位置是table上的一个座位),那么签名如:/***returnsanarrayindicatetheindexinthespecifiedhandsthat*correspondtothewinninglocations.Willreturnanemptyarrayif*therearenowinners.Thelengthofth

java - 是否可以将参数传递给枚举值?

假设我有一个Enum定义如下:publicenumSample{//supposeAClass.getValue()returnsanintA(AClass.getValue()),B(AClass.getValue()),C(AClass.getValue());privateint_value;privateSample(int_val){this._value=_val;}publicintgetVal(){return_value;}我可以使用Sample.A或Sample.A.getAVal()毫无问题地提取值。现在假设AClass.getValue()可以接受一个参数来返回

java - 在 Java 中暴力破解自己的加密

我正在为一个类编写程序,首先使用预定key加密字符串。那部分完成了。下一部分是我本身有问题或没有问题的地方。这是一个冗余问题。在此之后,我应该对字符串和加密字符串执行KPA以找到key。这是有效的,但我使用了15个嵌套的for循环来进行暴力破解。还有另一种方法吗?没有递归地做!staticStringKey=null;publicstaticvoidmain(String[]args){longstartTime=System.nanoTime();longstartTime1=System.currentTimeMillis();intcntr=0;Stringkey="AAAAAA

java - 自组织搜索程序

作业题要求用下面数组的每一位调用“find”和“find2”。但是,我被卡住了,因为我一开始不明白代码在做什么。摘自文本,该程序“测试100个元素的算法,其中包含20%的元素和30%的引用。”{9,0,0,6,3,9,2,4,5,9,0,0,6,3,9,2,4,5,9,0,0,6,3,9,2,4,5}//Agivensetrepeated3times我被告知的是:我应该更改当前的for循环体我必须打印出搜索到的数组(搜索到的数字移到较早的位置)。我要的是对以下内容的解释。然后我可以继续实际操作代码。find2到底在做什么?调用find和find2的for循环内部发生了什么?如何获得计数

java - Coin change DP解决方案来跟踪硬币

尝试为一般硬币找零问题编写DP解决方案,同时跟踪使用了哪些硬币。到目前为止,我一直在努力为我提供所需的最少硬币数量,但无法弄清楚如何获得使用了哪些硬币以及使用了多少次。如果使用硬币,我尝试用值设置另一个表(boolean值),但这似乎无法正常工作。有什么想法吗?publicstaticintminChange(int[]denom,intchangeAmount){intm=denom.length;intn=changeAmount+1;int[][]table=newint[m][n];boolean[][]used=newboolean[m][n];for(intj=0;j=0;

java - 在java中将二维二进制矩阵转换为黑白图像

我是java新手。我现在有只有1和0的二维二进制矩阵。我想将它保存为具有相同宽度和高度的jpg图像(黑白)。我怎么会意识到这一点?我尝试了下面的代码但失败了,说“java.lang.IllegalArgumentException:image==null!”请帮助我或给我更好的解决方案。非常感谢。publicstaticvoidmain(String[]args)throwsIOException{//resultisdouble[25][33]binarymatrixwithonly1sand0s;intheight=result.length;intwidth=result[0].

java - 为什么 FileReader 和 FileWriter 使用一个 INT 变量来读写?

为什么FileReader和FileWriter使用一个INT变量来读写?读取文本文件时,这个变量不应该是String或char类型吗?为什么是INT? 最佳答案 如果您查看documentationforInputStreamReader,你会看到它提供了两个read()方法。一个返回单个字符作为int另一个将数据读入char[].我假设你问的是第一个版本。它返回int的原因而不是char是为了在流到达EOF时返回-1。如果要读取其他类型的数据,比如String或double,还有其他流类可以环绕FileReader.

java - 是否有任何理由在 Java 8 中重写枚举中的方法

正如指出的那样herelambda提供了一种非常优雅的方式来指定单个枚举值的行为。在Java8之前,我通常会将其实现为:enumOperator{TIMES{publicintoperate(intn1,intn2){returnn1*n2;}},PLUS{publicintoperate(intn1,intn2){returnn1+n2;}};publicintoperate(intn1,intn2){thrownewAssertionError();}}现在我倾向于使用:enumOperator{TIMES((n1,n2)->n1*n2),PLUS((n1,n2)->n1+n2);

Java8 整数流与 IntStream

使用以下代码,我遇到了以下编译错误。我还尝试使用input作为Integer列表而不是int[]并且它工作正常。如果我使用boxed(),它也能正常工作。我的问题真的是,如果是IntStream,它是否必须是Integer流,以及如何处理错误消息“lambda表达式int[]中的错误返回类型无法转换为int”publicstaticvoidmain(String[]args){int[]numbers={1,2,3,4};Listresult1=Arrays.stream(numbers).flatMap(chara->Arrays.stream(numbers).map(operan