Java字符串匹配代码多次运行结果不一致问题求助
需要实现输入的line1字符串与拆分后的line3数组元素匹配,若匹配则返回“Yes”。但同一Java代码多次运行时,结果时而为“Yes”时而为“No”,无法定位问题。
PS C:\Users\User\Desktop\Learning Java> c:; cd 'c:\Users\User\Desktop\Learning Java'; & 'C:\Program Files\Java\jdk-16.0.2\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessacheese
cheese burger
cheese
Yes
No
PS C:\Users\User\Desktop\Learning Java> c:; cd 'c:\Users\User\Desktop\Learning Java'; & 'C:\Program Files\Java\jdk-16.0.2\bin\java.exe' '-XX:+ShowCodeDetailsInExceptionMessages' '-cp' 'C:\Users\User\AppData\Roaming\Code\User\workspaceStorage\9c7b2b1e513c6038db76e183d731b494\redhat.java\jdt_ws\Learning Java_3455c92c\bin' 'PaizaRankC1'
cheese
cheese burger
No
No
import java.util.*; public class PaizaRankC1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line1 = sc.nextLine(); // String line2 = sc.nextLine(); String line3 = sc.nextLine(); String ans = null; String [] splitLine3 = line3.split(" "); // System.out.println(Arrays.toString(splitLine3)); // System.out.println(line1.equals(splitLine3[0])); for (int i = 0; i < splitLine3.length; i++) { // System.out.println(line1.equals(splitLine3[i])); // System.out.println(i); if (line1.equals(splitLine3[i])){ System.out.println(splitLine3[i]); ans = "Yes"; System.out.println(ans); // break; }else{ ans = "No"; System.out.println(ans); } } } }
- 结果被覆盖:循环中每遇到不匹配的元素,就会把
ans重置为“No”,哪怕之前已经找到匹配项。比如line3是cheese burger,第一个元素匹配时ans设为“Yes”,但第二个元素不匹配时,ans又被改成“No”,导致输出混乱。 - 未终止循环:注释掉了
break语句,找到匹配后仍会继续遍历后续元素,后续不匹配的元素会覆盖之前的正确结果。 - 多次打印冗余:循环内部每次判断都打印
ans,不符合“只要匹配成功就返回Yes”的预期(应该只输出最终一次结果)。
import java.util.*; public class PaizaRankC1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String line1 = sc.nextLine(); String line3 = sc.nextLine(); String ans = "No"; // 默认设为不匹配状态 String[] splitLine3 = line3.split(" "); for (int i = 0; i < splitLine3.length; i++) { if (line1.equals(splitLine3[i])) { ans = "Yes"; break; // 找到匹配后立即终止循环,避免后续元素修改结果 } } System.out.println(ans); // 统一打印最终结果 } }
- 初始化
ans为“No”,默认状态为不匹配,符合逻辑习惯。 - 找到匹配元素后立即跳出循环,确保后续元素不会覆盖正确结果。
- 循环结束后只打印一次最终结果,无论运行多少次,只要存在匹配项就稳定返回“Yes”。
内容的提问来源于stack exchange,提问作者user23380874

