[英]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.