2013-12-13 12 views
2

我正在研究一些代碼,它將允許程序檢查用戶是否輸入了姓名和出生日,並決定今天的生日是否是生日快樂。但是,儘管我已經設法讓程序使用正確的日期並播放歌曲,但if語句似乎沒有正常工作。當我輸入當前日期作爲生日時,即使名稱框爲空,生日快樂歌曲也會始終啓動,並且它應該詢問您的姓名。這隻發生在生日文本框和當天匹配時,所以任何人都可以幫助我獲得我的if語句正常工作。這是我的if語句代碼。如果聲明在android中不斷激活

if((btn==v) && (name.getText().toString()!="") && (bday.getText().toString()!="") && (bday.getText().toString().equals(formatdate))){ 
     String msg1 = "Today is " + sdf.format(cdate.getTime()) + ". Happy Birthday, " + name.getText() + "!"; 
     toast = Toast.makeText(this, msg1, Toast.LENGTH_SHORT); 
     toast.show(); 
     //Context context = null;   

     mp.start(); 
     //mp.stop(); 
     response.setText(msg1);   
    }else if(btn==v && name.getText().toString().equals("") && bday.getText().toString()!=""){ 
     String msg3 = "Please enter your name."; 
     toast = Toast.makeText(this, msg3, Toast.LENGTH_SHORT); 
     toast.show(); 
     mp.stop(); 
     response.setText(msg3);    
    }else if(btn==v && name.getText().toString()!="" && bday.getText().toString().equals("")){ 
     String msg4 = "Please enter your birthday."; 
     toast = Toast.makeText(this, msg4, Toast.LENGTH_SHORT); 
     toast.show(); 
     response.setText(msg4); 
    }else if(btn==v && name.getText().toString().equals("") && bday.getText().toString().equals("")){ 
     String msg5 = "Please enter your name and birthday."; 
     toast = Toast.makeText(this, msg5, Toast.LENGTH_SHORT); 
     toast.show(); 
     response.setText(msg5); 
    }else{ 
     String msg2 = "Today is " + formatdate + ". Sorry today is not your birthday."; 
     toast = Toast.makeText(this, msg2, Toast.LENGTH_SHORT); 
     toast.show(); 
     response.setText(msg2); 
    } 
+0

首先要做的就是停止使用'!=「」'比較字符串,再加上所有條件以'btn == v && name.getText()'開始 - 您應該在剩下的事情之前將其作爲一個語句來執行 - 您代碼將更容易遵循,然後您可能會更快地發現問題。 – John3136

+0

我鼓勵您瞭解logging/logcat/adb,以便您可以更有效地調試此問題和未來的問題。 – jarmod

回答

0

在Java操作符==是的簡單比較。對於 對象引用,值爲引用,因此如果x和y引用同一對象,則x == y 將返回true。

  1. 沒有了getText()因爲它本身返回字符串需要toString()
  2. 變化bday.getText().toString()!=""!bday.getText().equals("")
  3. 變化name.getText().toString()!=""!name.getText().equals("")
1

有跡象表明,你需要改變一些東西。你不需要這樣做:

name.getText().toString() 

你可以去掉toString()部分。

二。而不是做這樣的事情的:

name.getText().toString()!="" 

它改成這樣:

!name.getText().equals("") 

因爲.equals()返回一個布爾值,你不能用==!=

比較字符串最後,你需要確保不要使用b == v但是b.equals(v)

0

我覺得問題l在「!=」運算符中。在Java中,運算符「==」和「!=」僅在被引用的對象相等時纔會比較。它意味着對象本身只有「==」。而「.equals()」函數比較兩個對象的內容。你應該總是使用「equals()」函數來比較兩個對象的內容。 使用

btn.euqals(v); 
!name.getText().toString().equals(""); 

代替。