2013-12-13 1 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

로깅/logcat/adb에 대해 배우고이 문제를 디버깅 할 수 있도록 장려 할 것입니다. – jarmod

답변

0

자바에서 == 연산자 값들의 단순 비교된다. 개체 참조의 경우 값은 참조이므로 x == y 은 x와 y가 동일한 개체를 참조하면 true를 반환합니다.

  1. 그 자체가 문자열을 반환 이후 getText()에 대한 toString()의 필요가 없습니다.
  2. 변화 bday.getText().toString()!=""!name.getText().equals("")
1

로 변경 name.getText().toString()!=""

  • !bday.getText().equals("")을 변경해야 할 몇 가지가있다. 이 작업을 수행 할 필요가 없습니다.

    name.getText().toString() 
    

    toString() 부분을 제거 할 수 있습니다.

    초. 대신에이 같은 일을이에

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

    변경을 : 부울을 반환하고 마지막으로 등 == 또는 !=

    와 문자열을 비교할 수 없습니다

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

    .equals() 때문에, b == v을 사용해야하지만 b.equals(v)

  • 0

    문제가 있다고 생각합니다. "! ="연산자에 포함됩니다. Java에서 연산자 "=="및 "! ="은 참조 된 객체가 동일한 지 비교합니다. 그것은 객체 "=="자체를 의미합니다. ". equals()"함수는 두 객체의 내용을 비교합니다. 두 객체의 내용을 비교하려면 항상 "equals()"함수를 사용해야합니다. 사용

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

    대신에.

    관련 문제