2013-11-23 100 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

相關問題