能否在布尔逻辑中使用CompareTo?城市名排序代码报错(禁用数组)
无数组情况下用CompareToIgnoreCase排序城市名的逻辑修正
你的问题出在逻辑判断的条件上:compareToIgnoreCase返回的int值不能直接参与&&逻辑运算,必须明确比较方向(是小于、大于还是等于),原代码的逻辑没有准确表达“某个城市比另外两个都靠前”的判断。
错误原因分析
原代码里的(sCity1.compareToIgnoreCase(sCity3))直接用int值作为逻辑判断,Java会把非零int视为true,但这不是你要的排序逻辑——比如如果sCity1比sCity3字母顺序靠后,这个方法返回正数,会被当成true,导致错误选择sCity1。你之前只加>0也不对,因为我们需要判断的是“当前城市比另外两个都靠前”,也就是返回值小于0。
修正后的代码
sFirst = (sCity1.compareToIgnoreCase(sCity2) < 0 && sCity1.compareToIgnoreCase(sCity3) < 0) ? sCity1 : (sCity2.compareToIgnoreCase(sCity3) < 0) ? sCity2 : sCity3;
逻辑说明
compareToIgnoreCase返回负数 → 前者字母顺序在后者之前(更靠前)- 第一个条件判断:如果sCity1比sCity2和sCity3都靠前,就选sCity1
- 如果不满足,再判断sCity2是否比sCity3靠前,是就选sCity2,否则选sCity3
这样就能准确选出三个城市中字母顺序最靠前的那个,完全不需要数组。
内容的提问来源于stack exchange,提问作者Karbn
相关产品推荐
相关产品推荐

