2013-11-23 73 views
-1

我比较2 EditText框的字符串时有一些问题。 这里是JAVA:JAVA(Android) - 比较两个字符串时,即使它们相同它返回false

public void signUpSubmit(View v){ 
    ErrorBox.setText(""); 
    String eAdd = EmailAddress.getText().toString(); 
    String eAddConf = ConfirmEmail.getText().toString(); 
    String pass = Password.getText().toString(); 
    String passConf = ConfirmPassword.getText().toString(); 
    String fName = FirstName.getText().toString(); 
    String lName = LastName.getText().toString(); 

    Boolean emailSame; 
    Boolean passSame; 
    Boolean emailEmpty; 
    Boolean passEmpty; 
    Boolean fNameEmpty; 
    Boolean lNameEmpty; 

    if(eAdd.equals(eAddConf)){ 
     emailSame = true; 
    }else{ 
     emailSame = false; 
    } 
    if(pass.equals(passConf)){ 
     passSame = true; 
    }else{ 
     passSame = false; 
    } 
    if(eAdd.equals("")){ 
     emailEmpty = true; 
    }else{ 
     emailEmpty = false; 
    } 
    if(pass.equals("")){ 
     passEmpty = true; 
    }else{ 
     passEmpty = false; 
    } 
    if(fName.equals("")){ 
     fNameEmpty = true; 
    }else{ 
     fNameEmpty = false; 
    } 
    if(lName.equals("")){ 
     lNameEmpty = true; 
    }else{ 
     lNameEmpty = false; 
    } 

    Boolean noErrors; 
    String ErrorCode = null; 
    if(emailEmpty==true){ 
     noErrors=false; 
     ErrorCode = "Email is Empty"; 
    }else if(fNameEmpty==true){ 
     noErrors=false; 
     ErrorCode = "First name is Empty"; 
    }else if(lNameEmpty==true){ 
     noErrors=false; 
     ErrorCode = "Last Name is Empty"; 
    }else if(passEmpty==true){ 
     noErrors=false; 
     ErrorCode = "Password is Empty"; 
    }else if(emailSame==true){ 
     noErrors=false; 
     ErrorCode = "Emails Don't Match"; 
    }else if(passSame==true){ 
     noErrors=false; 
     ErrorCode = "Passwords Don't Match"; 
    }else{ 
     noErrors=true; 
    } 
    if (noErrors==false){ 
     ErrorBox.setText(ErrorCode); 
    }else{ 
     String signUpStatus = signUpHttp(eAdd, pass, fName, lName); 
     if (signUpStatus.equals("Error")){ 
      ErrorBox.setText("Server Down, Please Try Again Later"); 
     }else if (signUpStatus.equals("False")){ 
      ErrorBox.setText("That Email has already been used"); 
     }else if (signUpStatus.equals("True")){ 
      MainActUN.setText(eAdd); 
      MainActPW.setText(pass); 
      Intent intent = new Intent(this, MainActivity.class); 
      startActivity(intent); 
     } 
    } 
} 

我确实有重复,如果在自己的函数语句,但我这样做是为了看它是否会解决我的问题,但它并没有任何帮助是极大的赞赏。

编辑----------------------------------

对不起,没有具体的,如果所有的文本框被填充,我得到的电子邮件不匹配,我已经删除了电子邮件测试,同样的事情发生,说密码不匹配,但其余与.equals(“”)是好的。

+2

该冗余代码冗余且由于冗余而难以阅读。什么,具体不工作?他们都不工作? – nhgrif

+0

事实上是多余的,为什么不具体说明哪两个编辑文本和代码中出现意外行为的地方。 – ChiefTwoPencils

+0

如果...请删除所有这些!只需使用例如“emailSame = eAdd.equals(eAddConf);”这将使代码更容易阅读和理解! – isnot2bad

回答

0

让我看看我的面食代码阅读技巧是否准确。看看你在做什么这里:

if(pass.equals(passConf)){ 
     passSame = true; 
}else{ 
     passSame = false; 
} 

用简单的英语:“如果密码和确认密码匹配,passSame是真正的”

现在到这里:

}else if(passSame==true){ 
    noErrors=false; 
    ErrorCode = "Passwords Don't Match"; 

别你的意思是设定noErrors为真?

即使密码和密码确认通过了您的测试(它们确实是相同的),您仍会将传递条件设置为失败测试。你正在为你的电子邮件和电子邮件确认做同样的事情。

字符串测试的工作,但你的代码标志着通过测试失败。字符串比较没有问题,但是逻辑有问题。

仅仅为了将来,程序员之间争论很大(最终是毫无意义的)关于开启的大括号是应该在自己的行还是在前一行的末尾。然而,关于大括号的结束位置没有任何争议。

}else{ 

只是fugly的代码。我必须同意,你需要删除所有这些冗余的东西。我知道你做了测试,但是你让我们的眼睛看到一些严重的风格残暴的代码,这是不是一件好事情,因为你要求我们免费看。多用一些空格 - 你的代码将会无限易于阅读。

编写紧凑的代码(或者像Java那样紧凑)。匹配,测试等都可以通过几行代码完成。 Java是一个足够罗嗦的语言,因为它是。

+0

哇,我没有看到,我看起来像一个正确的白痴哈哈。如果将来需要发布任何内容,我会牢记这些要点,感谢您的帮助。 – jafacakes2011

+0

不用担心。我们都做出了(并继续犯下)很多错误。如果你不是在动,就不会试着去尝试。我希望你继续在SO上发帖。随着您获得更多经验,您将发布答案和问题,并且您将帮助社区变得更加强大。 – MarsAtomic

相关问题