二维数组-只有数组最后一行的值被正确赋值,其余的值被赋值为null

ktca8awb  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(298)

我有一个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个用例将正确保存到数组中。
另外,请建议使用任何集合来代替二维数组。

vwkv1x7d

vwkv1x7d1#

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

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";
  }
}
oyxsuwqo

oyxsuwqo2#

你错过了这里的支架:

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

这两行后面的代码与此无关 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` 变量名。

相关问题