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