你好,我有一个问题,我想要你的帮助,我有一张叫做citylink的桌子[10] [2] 并且我想在我继续我的代码之前做一个检查如果它已经完全继续,如果不打破!!我知道我应该使用if循环,但我不知道该放在里面!!
修改
for(int i=0; i < citylink.length; i++) {
if(citylink[][]) {
body=pF.fetchPage(citylink[i][1]);
}
}
我想首先检查我的表中是否有数据或至少5个第一列!!!然后插入正文并使用此命令
答案 0 :(得分:5)
您应该考虑使用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
。
或至少5个第一列!
鉴于此声明:
int[][] table = new int[10][20];
传统上table
被认为有10行,每行有20列。
答案 1 :(得分:2)
如果我理解正确,您需要确保表中的所有链接都已初始化,然后再将其中的每个链接传递给方法。
如果你真的想使用数组,代码可能是这样的:
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,因为列表更可取。使用数组的唯一令人信服的原因可能是与遗留代码的向后兼容性。另一种情况是,如果您想要与集合中特定索引相关联的特定链接;你不能用Lists轻松做到这一点,因为列表不能有“漏洞”。但是,你可能最好使用Map。
答案 2 :(得分:0)
你肯定希望避免代码中的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网址的内容。