循环具有未定义的迭代次数

时间:2012-05-01 13:07:08

标签: java loops

我有一个逻辑问题。允许用户向表单添加任意数量的字段。提交表单后,我需要收集所有字段的值并将它们存储在ArrayList中。问题是我不知道表单中是否只有1个字段,或500。

我区分单个表单字段的方法是在其名称中添加索引号,因此在表单中有名称=“field1”,name =“field2”等字段。

这是我到目前为止的代码:

for (int i = 1; i < number of fields; i++) {
    while (request.getParameter("field" + Integer.toString(i)) != null) {
        Add to ArrayList
    }
}

如何找到字段数?或者也许还有另一个解决这个问题的方法?

7 个答案:

答案 0 :(得分:4)

使用while循环:

int i=0;

while (request.getParameter("field" + Integer.toString(i)) != null) {

    // Add to ArrayList

    i++; // very important, don't forget this one
}

// i is the count of fields at this point

答案 1 :(得分:0)

这应该没问题:

i=1;

while (request.getParameter("field" + Integer.toString(i)) != null) {
        //Add to ArrayList
        i++;
}

答案 2 :(得分:0)

java中有3种类型的循环。

  1. for循环 - 当您确切地知道要迭代的条目数时使用。
  2. while循环 - 当你不知道有多少时使用,可以是0 - 500
  3. a do while - 当它必须至少运行一次以及之后的任何数字时使用。
  4. 听起来你需要找出一种方法来检查一个字段是否存在并构建一段时间或者做什么同时取决于它们是否能够输入0

答案 3 :(得分:0)

您可以使用request.getParameterNames()并遍历元素

for(Enumeration e = request.getParameterNames();
 e.hasMoreElements(); ){
                String parameterName = (String)e.nextElement();
             //Your code logic with the parameter.

}

这是一种更有效的逻辑,因为您不需要先计算参数数量,然后再添加到ArrayList。你不需要和null和NPE一起玩

答案 4 :(得分:0)

您的request对象应该有一些有用的方法,例如getParameterNames枚举StringgetParameterMap,这是不言自明的。这两个都可以用来设置所有参数的循环,无论它们的数量如何。

HTH

答案 5 :(得分:0)

Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
  String parameterName = parameterNames.nextElement();
  if (parameterName.startsWith("field")) {
    Add request.getParameter(parameterName) to ArrayList
  }
}

答案 6 :(得分:0)

您可以使用getParameterValues()获取所有值来执行此操作,您必须确保页面中的所有字段都应具有相同的名称。像这样

<input type="text" name="field" id="field1"/>
<input type="text" name="field" id="field2"/>
<input type="text" name="field" id="field3"/>
<input type="text" name="field" id="field4"/>

在服务器端你可以像这样写

String[] arrFields  = request.getParameterValues("field");
for(String field: arrField)
{
      // put the field into the arraylist.
}