Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅使用迭代器返回字符串数组_Java - Fatal编程技术网

Java 仅使用迭代器返回字符串数组

Java 仅使用迭代器返回字符串数组,java,Java,这里没有程序员。我很难找出我的错误在下面的代码中。我试图仅使用迭代器返回字符串数组 我知道在我调用matchingProv[]=provinceName的第二个if语句之后,我的代码逻辑可能不正确不确定是否应该将int索引变量放在方括号内?不确定我问的问题是否正确 谢谢你的帮助 public String[] getProvincesWhoseNameStartsWith(char letter) { String[] matchingProv; String str = St

这里没有程序员。我很难找出我的错误在下面的代码中。我试图仅使用迭代器返回字符串数组

我知道在我调用
matchingProv[]=provinceName的第二个if语句之后,我的代码逻辑可能不正确不确定是否应该将int索引变量放在方括号内?不确定我问的问题是否正确

谢谢你的帮助

public String[] getProvincesWhoseNameStartsWith(char letter) {

    String[] matchingProv;
    String str = String.valueOf(letter);
    ProvinceTerritory temp = null;
    int index = 0;

    if(provinces != null) {
        Iterator<ProvinceTerritory> provinceIT = provinces.iterator();

        while(provinceIT.hasNext()) {
            temp = provinceIT.next();

            if(temp != null && temp.getName() != null && temp.getName().startsWith(str)) {
                String provinceName = temp.getName();
                matchingProv[] = provinceName;
            }
            index++;
        }
    }
    return matchingProv;
  }
}
public字符串[]getProvincesWhoseNameStartsWith(字符){
字符串[]匹配prov;
String str=String.valueOf(字母);
ProvinceTerritory temp=null;
int指数=0;
如果(省份!=null){
迭代器provinceIT=省。迭代器();
while(provinceIT.hasNext()){
temp=provinceIT.next();
如果(temp!=null&&temp.getName()!=null&&temp.getName().startsWith(str)){
字符串provinceName=temp.getName();
matchingProv[]=provinceName;
}
索引++;
}
}
返回匹配prov;
}
}

由于您不知道有多少省份以您在方法输入中提供的字符开头,因此我们无法创建字符串数组,因为它在声明时需要数组的大小。您可以做的是创建一个ArrayList并在其中存储数据,在返回时,您可以转换为字符串数组并从该方法返回。我在下面的代码中对其进行了一些修改:

public String[] getProvincesWhoseNameStartsWith(char letter) {

            ArrayList<String> al = new ArrayList<>();
            String str = String.valueOf(letter);
            ProvinceTerritory temp = null;
            int index = 0;

            if(provinces != null) {
                Iterator<ProvinceTerritory> provinceIT = provinces.iterator();

                while(provinceIT.hasNext()) {
                    temp = provinceIT.next();

                    if(temp != null && temp.getName() != null && temp.getName().startsWith(str)) {
                        String provinceName = temp.getName();
                        al.add(provinceName);
                    }
                    
                    }
                }
            String[] matchingProv = new String[al.size()];
            matchingProv = al.toArray(matchingProv);
            return matchingProv;
            }
        }
public字符串[]getProvincesWhoseNameStartsWith(字符){
ArrayList al=新的ArrayList();
String str=String.valueOf(字母);
ProvinceTerritory temp=null;
int指数=0;
如果(省份!=null){
迭代器provinceIT=省。迭代器();
while(provinceIT.hasNext()){
temp=provinceIT.next();
如果(temp!=null&&temp.getName()!=null&&temp.getName().startsWith(str)){
字符串provinceName=temp.getName();
新增(省名);
}
}
}
String[]matchingProv=新字符串[al.size()];
matchingProv=al.toArray(matchingProv);
返回匹配prov;
}
}

由于您不知道有多少省份以您在方法输入中提供的字符开头,因此我们无法创建字符串数组,因为它在声明时需要数组的大小。您可以做的是创建一个ArrayList并在其中存储数据,在返回时,您可以转换为字符串数组并从该方法返回。我在下面的代码中对其进行了一些修改:

public String[] getProvincesWhoseNameStartsWith(char letter) {

            ArrayList<String> al = new ArrayList<>();
            String str = String.valueOf(letter);
            ProvinceTerritory temp = null;
            int index = 0;

            if(provinces != null) {
                Iterator<ProvinceTerritory> provinceIT = provinces.iterator();

                while(provinceIT.hasNext()) {
                    temp = provinceIT.next();

                    if(temp != null && temp.getName() != null && temp.getName().startsWith(str)) {
                        String provinceName = temp.getName();
                        al.add(provinceName);
                    }
                    
                    }
                }
            String[] matchingProv = new String[al.size()];
            matchingProv = al.toArray(matchingProv);
            return matchingProv;
            }
        }
public字符串[]getProvincesWhoseNameStartsWith(字符){
ArrayList al=新的ArrayList();
String str=String.valueOf(字母);
ProvinceTerritory temp=null;
int指数=0;
如果(省份!=null){
迭代器provinceIT=省。迭代器();
while(provinceIT.hasNext()){
temp=provinceIT.next();
如果(temp!=null&&temp.getName()!=null&&temp.getName().startsWith(str)){
字符串provinceName=temp.getName();
新增(省名);
}
}
}
String[]matchingProv=新字符串[al.size()];
matchingProv=al.toArray(matchingProv);
返回匹配prov;
}
}

如果只能使用
迭代器,则需要执行两个过程。首先计算匹配项,然后复制到输出。大概

public String[] getProvincesWhoseNameStartsWith(char letter) {
    int count = 0;
    if (provinces != null) {
        Iterator<ProvinceTerritory> provinceIT = provinces.iterator();

        while (provinceIT.hasNext()) {
            ProvinceTerritory temp = provinceIT.next();
            if (temp != null && temp.getName() != null
                        && letter == temp.getName().charAt(0)) {
                count++;
            }
        }
    }
    String[] matchingProv = new String[count];
    if (count > 0) {
        Iterator<ProvinceTerritory> provinceIT = provinces.iterator();
        for (int i = 0; i < count; i++) {
            ProvinceTerritory temp = provinceIT.next();
            if (temp != null && temp.getName() != null
                        && letter == temp.getName().charAt(0)) {
                matchingProv[i] = temp.getName();
            } else {
                i--;
            }
        }
    }
    return matchingProv;
}

如果只能使用
迭代器
,则需要执行两个过程。首先计算匹配项,然后复制到输出。大概

public String[] getProvincesWhoseNameStartsWith(char letter) {
    int count = 0;
    if (provinces != null) {
        Iterator<ProvinceTerritory> provinceIT = provinces.iterator();

        while (provinceIT.hasNext()) {
            ProvinceTerritory temp = provinceIT.next();
            if (temp != null && temp.getName() != null
                        && letter == temp.getName().charAt(0)) {
                count++;
            }
        }
    }
    String[] matchingProv = new String[count];
    if (count > 0) {
        Iterator<ProvinceTerritory> provinceIT = provinces.iterator();
        for (int i = 0; i < count; i++) {
            ProvinceTerritory temp = provinceIT.next();
            if (temp != null && temp.getName() != null
                        && letter == temp.getName().charAt(0)) {
                matchingProv[i] = temp.getName();
            } else {
                i--;
            }
        }
    }
    return matchingProv;
}

对于这种编码工作,您需要:

  • 使用
    new
    关键字分配存储
    provinceName
    的内存,例如,如果需要最多存储10个名称,
    String[]matchingProv=new String[10]

  • provinceName
    存储在使用
    matchingProv[index]=provinceName
    分配的内存中,使用
    index
    访问数组的特定位置并存储名称,
    index
    值必须最大为9,否则会导致数组溢出。对于我的示例,在0到9的间隔上是有效的
    索引


  • 对于这种编码工作,您需要:

  • 使用
    new
    关键字分配存储
    provinceName
    的内存,例如,如果需要最多存储10个名称,
    String[]matchingProv=new String[10]

  • provinceName
    存储在使用
    matchingProv[index]=provinceName
    分配的内存中,使用
    index
    访问数组的特定位置并存储名称,
    index
    值必须最大为9,否则会导致数组溢出。对于我的示例,在0到9的间隔上是有效的
    索引


  • 现在,如果我想返回省区[]。与返回常规字符串[]相比,我该如何做

    public ProvinceTerritory[]getMoreProvincesWhoseNameContains(字符串子字符串){

    ProvinceTerritory[]名称=新的ProvinceTerritory[13];
    ProvinceTerritory temp=null;
    int指数=0;
    如果(省份!=null){
    迭代器provinceIT=省。迭代器();
    while(provinceIT.hasNext()){
    temp=provinceIT.next();
    如果(temp!=null&&temp.getName()!=null&&temp.getName()。包含(子字符串)){
    名称[索引]=temp.getName();
    }
    }
    }
    返回姓名;
    }
    
    现在如果我要返回Pr