按长度筛选数组中国家名称的Java实现疑问
解决数组中筛选符合长度要求的国家名称问题
嘿,我来帮你梳理下这段代码的问题,然后一步步把它改对~
先看看你当前代码里的几个关键问题:
- 循环逻辑完全错了:你写的
for(int i = 0; i > min && i<max; i++)是在遍历索引i,但这里的i是数组的下标,不是国家名称的长度,而且条件也写反了(i从0开始,i>min一开始就不成立,循环根本不会执行)。正确的逻辑应该是遍历原数组的每一个元素,然后检查每个元素的长度是否在min和max之间。 - 数组初始化错误:
String[] newArr = new String[0];创建了一个长度为0的数组,之后你想往里面赋值newArr[pos++] = oldArr[i]肯定会抛出数组越界异常,因为这个数组没有任何可写入的位置。 - 缺少空值判断:如果原数组里有null元素,调用
length()会直接抛出空指针异常,得先做判断。
方案1:用ArrayList简化操作(推荐)
Java里用集合类来动态添加元素会方便很多,不需要提前计算长度,最后再转成数组就行:
import java.util.ArrayList; import java.util.List; public class CountryFilter { public static void main(String[] args) { String[] oldArr = {"China", "USA", "Canada", "Brazil", "Japan", "Australia"}; int minLength = 4; int maxLength = 6; List<String> filteredCountries = new ArrayList<>(); for (String country : oldArr) { // 先判断非空,再检查长度是否在范围内 if (country != null && country.length() >= minLength && country.length() <= maxLength) { filteredCountries.add(country); } } // 把集合转成数组 String[] newArr = filteredCountries.toArray(new String[0]); // 测试输出 for (String country : newArr) { System.out.println(country); } } }
方案2:用纯数组实现(符合你最初的思路)
如果一定要用数组,得先遍历原数组统计符合条件的元素数量,再创建对应长度的新数组,最后把符合条件的元素放进去:
public class CountryFilter { public static void main(String[] args) { String[] oldArr = {"China", "USA", "Canada", "Brazil", "Japan", "Australia"}; int minLength = 4; int maxLength = 6; // 第一步:统计符合条件的元素数量 int count = 0; for (String country : oldArr) { if (country != null && country.length() >= minLength && country.length() <= maxLength) { count++; } } // 第二步:创建对应长度的新数组 String[] newArr = new String[count]; int pos = 0; // 第三步:再次遍历原数组,把符合条件的元素放进新数组 for (String country : oldArr) { if (country != null && country.length() >= minLength && country.length() <= maxLength) { newArr[pos++] = country; } } // 测试输出 for (String country : newArr) { System.out.println(country); } } }
这两种方式都能实现你的需求:当min=4、max=6时,输出的会是China、Canada、Brazil、Japan这些长度在4-6之间的国家名称。
内容的提问来源于stack exchange,提问作者CaptnMartin
相关产品推荐
相关产品推荐

