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

Java binarySearch无法找到指定字符:查找字符W失败的原因排查

问题根源:数组未严格升序排列

嘿,这个问题很典型!你用Arrays.binarySearch找不到字符W的核心原因是你的字符数组并没有严格按照升序排列——仔细看你的数组:

char[] nam = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','W','Y','Z'};

你把X放在了W的前面,这直接违反了二分查找的前提条件:必须在已排序(升序)的数组中使用。

为什么会这样?

Arrays.binarySearch的工作原理是通过不断对比目标值和数组中间元素的大小,来缩小查找范围。如果数组本身无序,这个对比逻辑就完全失效了,自然找不到正确的元素位置,甚至会返回错误的负数结果。

修复方案

只需要把数组里的X和W调换位置,让数组恢复正确的升序顺序:

import java.util.Arrays;
import java.util.Scanner;

public class BinarySearch { 
    public static void main(String[] args) { 
        // 修正后:W在X前面,数组严格升序
        char[] nam = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 
        char code; 
        int pos; 
        int bck = 0; 
        while (bck == 0) { 
            Scanner sc= new Scanner(System.in); 
            System.out.print("Enter the Alphabet: "); 
            String str = sc.next(); 
            code = str.toUpperCase().charAt(0); 
            pos = Arrays.binarySearch(nam, code); 
            if (pos >= 0) { 
                System.out.println("Alphabet "+code+" is at position "+ ++pos); 
            }else{ 
                System.out.println("Character not found!"); 
            } 
        } 
    } 
}

这样修改后,再查找W就能正常返回它的正确位置啦!

内容的提问来源于stack exchange,提问作者Mr_G_Ncongwane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:21:41