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
相关产品推荐
相关产品推荐

