在Java中迭代2D数组

时间:2010-06-02 11:25:01

标签: java

你好,我有一个问题,我想要你的帮助,我有一张叫做citylink的桌子[10] [2] 并且我想在我继续我的代码之前做一个检查如果它已经完全继续,如果不打破!!我知道我应该使用if循环,但我不知道该放在里面!!

修改

for(int i=0; i < citylink.length; i++) {
  if(citylink[][]) {
    body=pF.fetchPage(citylink[i][1]);
  }
}

我想首先检查我的表中是否有数据或至少5个第一列!!!然后插入正文并使用此命令

3 个答案:

答案 0 :(得分:5)

您应该考虑使用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


在列与行

  

或至少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网址的内容

相关问题