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

按长度筛选数组中国家名称的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:35