在比较2个EditText框的字符串时,我遇到了一些问题。 这是JAVA:
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);
}
}
}
我确实在他们自己的函数中有重复的if语句,但我这样做是为了看它是否能解决我的问题,但事实并非如此,非常感谢任何帮助。
EDIT ----------------------------------
很抱歉没有具体,如果所有文本框都已填写,我知道电子邮件不匹配,我已经删除了电子邮件测试,同样的事情发生了说密码不匹配,但其余的.equals(“”)没问题。
答案 0 :(得分:0)
让我看看我的面食代码阅读技巧是否准确。看看你在这做什么:
if(pass.equals(passConf)){
passSame = true;
}else{
passSame = false;
}
用简单的英语:“如果密码和密码确认匹配,则passSame为真”
现在来到这里:
}else if(passSame==true){
noErrors=false;
ErrorCode = "Passwords Don't Match";
您是不是要将noErrors
设置为true?
即使密码和密码确认通过了您的测试(它们确实相同),您也会将传递条件设置为失败的测试。你正在为你的电子邮件和电子邮件确认做同样的事情。
字符串测试有效,但您的代码将传递测试标记为失败。字符串比较没有错,但是你的逻辑有问题。
仅仅是为了将来,程序员之间有一个很好的(最终毫无意义的)争论,即开放的花括号应该在它自己的行上还是在前一行的末尾。然而,关于闭合大括号的位置没有争论。
}else{
只是很难看的代码。我必须同意你需要删除所有这些冗余的东西。我知道你是为了进行测试而做的,但是你会让我们看到一些严肃的风格恶劣的代码,这不是一件好事,因为你要求我们免费查看 。使用更多的空格 - 您的代码将更容易阅读。
编写紧凑代码(或者像Java一样紧凑)。匹配,测试等都可以通过几行代码完成。 Java本身就是一种冗长的语言。