You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
            }
        }
    }
}
问题原因
  1. 结果被覆盖:循环中每遇到不匹配的元素,就会把ans重置为“No”,哪怕之前已经找到匹配项。比如line3是cheese burger,第一个元素匹配时ans设为“Yes”,但第二个元素不匹配时,ans又被改成“No”,导致输出混乱。
  2. 未终止循环:注释掉了break语句,找到匹配后仍会继续遍历后续元素,后续不匹配的元素会覆盖之前的正确结果。
  3. 多次打印冗余:循环内部每次判断都打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:13:40