[英]Iterating through 2D array in Java
你好,我有一个问题,我想要你的帮助,我有一个叫做citylink [10] [2]的表,我想在代码继续进行之前检查一下,如果不中断的话,它已经满了!!我知道我应该使用一个if循环,但是我不知道在里面放什么!
编辑
for(int i=0; i < citylink.length; i++) {
if(citylink[][]) {
body=pF.fetchPage(citylink[i][1]);
}
}
我想首先检查我的表中是否已满数据或至少前五列!!然后插入正文并使用此命令
您应该考虑使用java.util.List
而不是数组( Effective Java 2nd Edition,项目25:首选列表而不是数组 )。 看起来您也在使用2元素数组来表示“城市链接”。 这不是您数据的最佳模型。
您应该定义一个class CityLink
,也许是这样的:
public class CityLink {
final City source;
final City destination;
//...
}
然后,声明一个List<CityLink>
。
java.util.List<E>
int size()
-返回此列表中的元素数。 E get(int index)
-返回此列表中指定位置的元素。 add(E e)
-将指定的元素追加到此列表的末尾 java.util.ArrayList<E>
List
接口的可调整大小的数组实现。 如果坚持使用数组,则必须对数组中有多少个元素是“实际”元素进行计数。 最简单的方法是将int count = 0;
每次将元素添加到数组时,增量就增加。
在任何给定时间,数组中唯一的“真实”元素是arr[i]
,其中i
从0
(包括)到count
(不包括)。 当count == arr.length;
则阵列已满,无法再容纳任何其他元素。
再次需要指出的是,这样做是解决当前问题的可怕方法,只会在将来导致更多问题。 您确实应该使用List
。
或至少前五列!
鉴于此声明:
int[][] table = new int[10][20];
传统上, table
被认为具有10行,每行有20列。
如果我对您的理解正确,那么在将每个链接传递给方法之前,您需要确保表中的所有链接都已初始化。
如果您真的想使用数组,则代码可能是这样的:
for(int i=0; i < citylink.length; i++) {
for(int j=0; j < citylink[i].length; j++) {
if(citylink[i][j] == null) {
citylink[i][j] = ...
}
body=pF.fetchPage(citylink[i][j]);
}
}
但我同意@poly认为列表是更可取的。 使用数组的唯一令人信服的原因可能是与旧代码的向后兼容性。 另一种情况是,您是否希望将特定链接与集合中的特定索引关联; 您不能轻松地使用列表,因为列表不能有“漏洞”。 但是,使用Map可能会更好。
您一定要避免代码中出现NullPointerException问题,因此您可能想在调用fetchPage之前添加检查, 或者想向fetchPage方法添加一些额外的代码,无论如何我还是希望这样做。
for(int i=0; i < citylink.length; i++) {
if(citylink[i][1] != null) {
body=pF.fetchPage(citylink[i][1]);
}
}
是解决您问题的最简单解决方案。 一个更优雅的解决方案是实现一种用于检查citylink行的新方法:
//... inside some method
for(int i=0; i < citylink.length; i++) {
if(isValidCitylink(citylink[i])) {
body=pF.fetchPage(citylink[i][1]);
}
}
// ... more of this method
}
private boolean isValidCitylink(String[] citylink) {
// check null or wrong format
if (citylink == null || citylink.length != 2) return false;
// check if both column contain a value
if (citylink[0] == null || citylink[1] == null) return false
return true;
}
这是我建议的(从上一个问题中获取您的代码):
public String fetchPage(String url) {
try {
if (url != null) { // a null value check
return URIUtil.encodeQuery(url);
} else {
return "No URL available";
}
} catch (URIException e) {
e.printStackTrace();
}
}
请记住,在此代码中,对body
每次分配都会替换其先前的内容,并且该正文将包含列表/数组的最后一个有效citylink URL的内容 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.