java NullPointerException将int转换为字符串时出错

java NullPointerException将int转换为字符串时出错,java,Java,我有一个调用Java servlet的HTML表单,该表单包含20个复选框(例如名称为c1,c2,c3…c20) 我试图在java布尔数组cbox中捕获这些复选框的值 下面的代码 int ii=0; boolean cbox[] = new boolean[20]; for (ii=0; ii<20; ii++) cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"))?true:false

我有一个调用Java servlet的HTML表单,该表单包含20个复选框(例如名称为
c1
c2
c3
c20

我试图在java布尔数组
cbox
中捕获这些复选框的值

下面的代码

int ii=0;
boolean cbox[] = new boolean[20];
for (ii=0; ii<20; ii++)
   cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"))?true:false;
当然,这并不能满足我的需要。我一定是在什么地方犯了个愚蠢的错误,但我看不出来。有人看到了吗?

当您尝试引用未初始化的对象(null)时,会出现一个错误

查看您的代码,有两种可能:

  • req为空
    req.getParameter
  • 您试图检索的参数不存在,因此为null
    req.getParameter(“c”+String.valueOf((int)(ii+1))
顺便说一下,如果返回的参数已经是布尔值,则无需检查它的值并返回true或false,因为它的值已经是true或false。您可以将其简化为:

cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"));

编辑:要回答您的评论,您可以验证参数是否容易存在:

String param = req.getParameter("c" + String.valueOf(ii + 1));
cbox[ii] = "on".equals(param);
为了更安全,我还将检查
req
以确保它不为空

if(req != null)
{
    String param = req.getParameter("c" + String.valueOf((ii + 1));
    cbox[ii] = "on".equals(param);
}
注意,我删除了cast
(int)ii+1
,因为表达式已经是integer类型

此外,如果
ii
仅用作迭代器id,则可以直接在循环中声明它,而不是执行此操作:

int ii = 0;
for(ii = 0; ii < 20; ii++)
intii=0;
对于(ii=0;ii<20;ii++)

您可以直接为(int ii=0;ii<20;ii++)编写
这里的问题是在servlet中,您将在上收到
作为html选中复选框的默认值,否则为空。由于未选中所有复选框,因此将获得NPE。请尝试以下代码段:

boolean[] cbox = new boolean[20];
for(int i = 0; cbox.length > i; i++) {
   cbox[i] = null != req.getParameter("c" + (1 + i));//if not null then true else false
}
您也可以选择其他选项:

在html/jsp中,创建名称相同但值不同的复选框:

<input type="checkbox" name="cbox" value="1"/>
<input type="checkbox" name="cbox" value="2"/>
...
<input type="checkbox" name="cbox" value="20"/>

在这里,您不会将
上的
作为值,根据选择,它的值可能是
1
2
等等。只有复选框才会出现在这里。

这可能解释了。。。当复选框未选中时,其值为空。谢谢,但它仍然给出相同的错误。我想这是因为
String.valueOf(null)
给出了NullPointerException(请参阅)。@user46688
ii+1
不能为null。我的验证实际上是错误的,请参阅新编辑。是的,您的编辑现在工作正常。注意这里有一个拼写错误,但是有一个额外的左括号
((ii+1))
应该是
(ii+1))
。谢谢加1表示“开”。等于(param)谢谢@arvind,至少我验证了你上面的第一个解决方案非常有效。非常简洁!
<input type="checkbox" name="cbox" value="1"/>
<input type="checkbox" name="cbox" value="2"/>
...
<input type="checkbox" name="cbox" value="20"/>
String[] cbox = req.getParameterValues("cbox");