Java - 二维数组 - 仅正确分配数组最后一行的值,其余分配为null

时间:2015-04-28 14:05:48

标签: java arrays xml

我有一个XML格式如下;

    <TestCase>
    <Step Sel = "deleteAllVisibleCookies" Obj = "All cookies" Val = ""></Step>
    <Step Sel = "open" Obj = "URL" Val = "UserName:Password"></Step>
    <Step Sel = "waitForElementPresent" Obj = "link=mobile" Val = ""></Step>
    <Step Sel = "clickAndWait" Obj = "Mobile link" Val = ""></Step>
    ...
    </TestCase>
    <TestCase>
    <Step Sel = "deleteAllVisibleCookies" Obj = "All cookies" Val = ""></Step>
    <Step Sel = "open" Obj = "URL" Val = "UserName:Password"></Step>
    <Step Sel = "waitForElementPresent" Obj = "link=mobile" Val = ""></Step>
    <Step Sel = "clickAndWait" Obj = "Mobile link" Val = ""></Step>
    ...
    </TestCase>

基于上面的XML文件,我正在创建一个对象。我试图将所有步骤保存到二维数组中。所以一行是一个测试用例。

int i=0;
int j=0;
for (int TC = 0; TC < TCLst.getLength(); TC++)
    int k=0;
Node TCLstNode = TCLst.item(TC);
if (TCLstNode.getNodeType() == Node.ELEMENT_NODE)
{
    NodeList StepLst = TCLstNode.getChildNodes();
    Step = new String [TCCount][StepLst.getLength()];//defining total length
    Sel = new String [TCCount][StepLst.getLength()];
    Obj = new String [TCCount][StepLst.getLength()];
    Val = new String [TCCount][StepLst.getLength()];
    for (int Step = 0; Step < StepLst.getLength(); Step++)
    {
        Node StepLstNode = StepLst.item(Step);
        if (StepLstNode.getNodeType() == Node.ELEMENT_NODE)
        {
            if (StepLstNode.getNodeName() == "Step")
            {
                Sel[i][k] = ObjectType.getAttribute(StepLstNode,"Sel");//returns value of Sel attribute
                Obj[i][k] = ObjectType.getAttribute(StepLstNode,"Obj");
                Val[i][k] = ObjectType.getAttribute(StepLstNode,"Val");
                stepCountInTC++;
                k++;
            }
        }//NodeType
    }//for
    i++;
    stepCountInATCOfModule[j] = stepCountInTC;
    j++;
    stepCountInTC = 1;
}//TC if

我面临的问题是在创建对象之后,在打印任何二维数组时我得到输出(这里我使用了Sel属性);

[[null,null,null,null,...] [deleteAllVisibleCookies,open,waitForElementPresent,clickAndWait,...]]

问题此处首先将测试用例值保存为null。如果我使用带有3个测试用例的XML,则前2个测试用例保存为null,第3个案例正确保存到数组中。

另外请建议使用任何集合而不是二维数组。

2 个答案:

答案 0 :(得分:2)

你错过了大括号:

for (int TC = 0; TC < TCLst.getLength(); TC++)
    int k=0;

此2行之后的代码独立于此for,因为java认为您这样做:

for (int TC = 0; TC < TCLst.getLength(); TC++) {
    int k=0;
}

因此k始终为0

您的代码存在多个需要修复的问题。例如:

Step = new String [TCCount][StepLst.getLength()];

int Step = 0

Step更像是int或其他东西(在代码中不可见)混合它们并不是一件好事。您也没有使用camelCase变量名称。

答案 1 :(得分:0)

在每个外部循环中,用一个新数组覆盖整个数组:

Step = new String [TCCount][StepLst.getLength()];//defining total length

最后意味着您只找到Step变量的最后一个结果。

你必须做这样的事情:

int length = 10;
String[][] Step = new String[length][];

for (int i = 0; i < length; i++)
{
  int innerLength = 2;
  Step[i] = new String[innerLength];

  for (int j = 0; j < innerLength; j++)
  {
    Step[i][j] = "Value";
  }
}