簡體   English   中英

用Java遍歷2D數組

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

API鏈接

  • java.util.List<E>
    • int size() -返回此列表中的元素數。
    • E get(int index) -返回此列表中指定位置的元素。
    • add(E e) -將指定的元素追加到此列表的末尾
  • java.util.ArrayList<E>
    • List接口的可調整大小的數組實現。

保持計數

如果堅持使用數組,則必須對數組中有多少個元素是“實際”元素進行計數。 最簡單的方法是將int count = 0; 每次將元素添加到數組時,增量就增加。

在任何給定時間,數組中唯一的“真實”元素是arr[i] ,其中i0 (包括)到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM