Java中如何将一个char数组的每个元素与另一个数组所有元素比较?
解决方案
首先明确核心需求:遍历letrasPensador的每个元素,与letrasAdivinador的所有元素逐一匹配,每找到一次匹配就递增计数变量。结合你不能用==、仅允许循环或Arrays.equals()的要求,提供两种可行实现:
方法一:使用Character.equals()配合嵌套循环
char是基本类型,但其包装类Character的equals()方法可安全比较字符值(规避你担心的引用比较问题,完全符合练习要求)。代码如下:
int count = 0; // 初始化计数变量 // 外层循环遍历目标数组的每个元素 for (int x = 0; x < letrasPensador.length; x++) { char targetChar = letrasPensador[x]; // 内层循环遍历用户输入数组的所有元素 for (int y = 0; y < letrasAdivinador.length; y++) { char inputChar = letrasAdivinador[y]; // 用Character.equals替代==比较字符值 if (Character.equals(targetChar, inputChar)) { count++; } } }
方法二:使用Arrays.equals()配合嵌套循环
如果必须严格依赖Arrays类的equals()方法,可以将单个字符包装成长度为1的数组,通过比较单元素数组实现字符匹配:
int count = 0; for (int x = 0; x < letrasPensador.length; x++) { // 将当前字符转为单元素数组 char[] singleTarget = {letrasPensador[x]}; for (int y = 0; y < letrasAdivinador.length; y++) { char[] singleInput = {letrasAdivinador[y]}; // 用Arrays.equals比较两个单元素数组(本质是比较数组内的字符值) if (Arrays.equals(singleTarget, singleInput)) { count++; } } }
针对你原有注释逻辑的补充(若需位置匹配计分)
从你注释的代码看,似乎是类似Mastermind的游戏规则:位置完全匹配加2,字符匹配但位置不对加1。如果是这个需求,需要调整逻辑避免重复计数,核心匹配逻辑依然可用上述方式实现:
int b = 0; // 复制数组用于标记已匹配元素,避免重复计数 char[] tempPensador = Arrays.copyOf(letrasPensador, letrasPensador.length); char[] tempAdivinador = Arrays.copyOf(letrasAdivinador, letrasAdivinador.length); // 先统计位置完全匹配的情况 for (int x = 0; x < tempPensador.length; x++) { if (Character.equals(tempPensador[x], tempAdivinador[x])) { b += 2; // 标记已匹配元素 tempPensador[x] = '\0'; tempAdivinador[x] = '\0'; } } // 再统计字符匹配但位置不对的情况 for (int x = 0; x < tempPensador.length; x++) { if (tempPensador[x] == '\0') continue; // 跳过已匹配元素 for (int y = 0; y < tempAdivinador.length; y++) { if (tempAdivinador[y] == '\0') continue; if (Character.equals(tempPensador[x], tempAdivinador[y])) { b += 1; tempAdivinador[y] = '\0'; // 标记已匹配,避免重复 break; } } }
内容的提问来源于stack exchange,提问作者Ricardo Aguilar
相关产品推荐
相关产品推荐

