Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-检查if-Else语句是否赋值_Java_If Statement_Syntax Error - Fatal编程技术网

Java-检查if-Else语句是否赋值

Java-检查if-Else语句是否赋值,java,if-statement,syntax-error,Java,If Statement,Syntax Error,尝试编写一些代码来检查是否在JSP中的表单中输入了某些内容,如果没有,则从会话中为其分配值 完成此操作后,将从所有参数生成一个对象 除了 User user = new User(username, firstname, surname, password); comes up with a cannot **find symbol error** 我意识到这是因为它不在任何ifs中。有没有人能告诉我如何更改代码,以便它可以使用这些值 守则: try {

尝试编写一些代码来检查是否在JSP中的表单中输入了某些内容,如果没有,则从会话中为其分配值

完成此操作后,将从所有参数生成一个对象

除了

User user = new User(username, firstname, surname, password); comes up with a cannot **find symbol error** 
我意识到这是因为它不在任何ifs中。有没有人能告诉我如何更改代码,以便它可以使用这些值

守则:

  try {
                    User sessionuser =(User)session.getAttribute("User");
                    String username = sessionuser.getUsername();

                    if (request.getParameter("firstname").equals (null)){
                        String firstname = sessionuser.getFirstname();
                    }
                    else{String firstname = request.getParameter("firstname");
                    }

                    if (request.getParameter("surname").equals (null)){
                        String surname = sessionuser.getSurname();
                    }
                    else{String surname = request.getParameter("surname");
                    }
                    String password = request.getParameter("password");

                    User user = new User(username, firstname, surname, password);
                    //this.updateUser(user); 
                    this.updateUser(username, firstname, surname, password);

                    //user.updateUser();

                    session.setAttribute("User", user);
                    request.setAttribute("u", user);
                    request.getRequestDispatcher("UpdateUser.jsp").forward(request,     response);
提示

if (request.getParameter("firstname").equals (null)){ 


这永远不可能是真的,也可能是假的或抛出NullPointerException。使用
=
而不是
equals()

您正在if/else构造中定义变量
firstname
姓氏
,这是编译器阻止的。在这种情况下,是的,它将被定义,但在其他情况下可能不会,而且编译器不会在静态代码分析上花费太多时间,它将在不进一步调查的情况下防止此类行为

不要在if/else中定义变量,而是使用默认值,在这种情况下,您可以使用:

String surname = sessionuser.getSurname();

if (request.getParameter("surname") != null){
  surname = request.getParameter("surname");
}
注意,我稍微改变了一些条件


此外,if永远不会为true,它要么为false,要么抛出
NullPointerException
。改用
request.getParameter(“姓氏”)==null

您需要在
if
/
else
链中的块外声明变量

使用类似于:

String surname = request.getParameter("surname");
if (surname == null) {
  surname = sessionuser.getSurname();
}
对其他项目重复上述步骤

局部变量仅在定义它们的块(及其子块)中可用。按照您的操作方式,您可以在
if
else
块内创建变量,这些变量在这些块之外被丢弃(无法引用)

如果需要测试这些参数是null还是空字符串,请执行如下检查:

if ((surname == null) || ("".equals(surname))) { ... }

不要使用
==
来比较字符串,这是不可靠的-它比较的是引用,而不是字符串内容。

让我们从代码片段中找出错误原因

if (request.getParameter("firstname").equals (null)){
  String firstname = sessionuser.getFirstname();
}
在这里,您将在if语句中实例化字符串firstname,当条件为true时,将创建该字符串,但该字符串只能在if语句中访问

你应该做的是

String firstname = sessionuser.getFirstname();
if (request.getParameter("firstname") != null){
  firstname = request.getParameter("firstname");
}

我想应该是这样

 try {
                User sessionuser =(User)session.getAttribute("User");
                String username = sessionuser.getUsername(),firstname="",surname="",password="";

                if (request.getParameter("firstname") == ""){
                    firstname = sessionuser.getFirstname();
                }
                else{firstname = request.getParameter("firstname");
                }

                if (request.getParameter("surname") == ""){
                    surname = sessionuser.getSurname();
                }
                else{surname = request.getParameter("surname");
                }
                password = request.getParameter("password");

                User user = new User(username, firstname, surname, password);
                //this.updateUser(user); 
                this.updateUser(username, firstname, surname, password);

                //user.updateUser();

                session.setAttribute("User", user);
                request.setAttribute("u", user);
                request.getRequestDispatcher("UpdateUser.jsp").forward(request,     response);

您还可以使用
null
而不是

或者,您可以省去一些输入,并去掉IF-ELSE块。您可以使用类似StringUtils.defaultString的方法

)

一行对应一个字段即可:

String firstName = StringUtils.defaultString(request.getParameter("firstname"), sessionuser.getFirstname())
对其他字段执行相同的操作


此函数基本上替换了IF-ELSE块。作为奖励,您不会在IF-ELSE块中错误地声明变量:)

您可以使用字符串变量,然后检查它是否为NULL

String test = request.getParameter("test");

if (username.equals(""))
{
    //todo
}

非常感谢。我们把它修好了;你让我知道我是个白痴哈哈@吉米:请注意,这段代码可能不是你想象的那样。如果您希望
session.getAttibute(“…”)
返回
null
s,那么此代码不会检查它。如果您需要空字符串,则此代码也不需要。使用
equals
进行字符串比较,使用
==null
进行空检查/空字符串和空字符串之间的唯一区别是空字符串占用内存,并在其中存储“”。无论如何,我也提到过如果你想的话可以使用null。取决于您。If类似于request.getParameter(“firstname”)==“”将永远不会为真。如果要测试相等性,需要使用“.equals”(request.getParameter(“firstname”))。请注意,当firstname为null时,这不会处理这种情况。我希望它的工作方式是,当表单的“username”行中没有输入某个内容时,它会将“username”的值设置为会话中存储的用户名(如果有意义的话)?在todo部分,您应该编写您打算执行的操作的代码
String test = request.getParameter("test");

if (username.equals(""))
{
    //todo
}