dancer_69
dancer_69

Reputation: 331

Better way to handle if statments for multiple text views?

I have some textviews which I want to check them and return the first which is empty. I've managed to do it this way:

public TextView CurrentPos(){

    if (!wordLetter1.getText().toString().equals("*") &&
    !wordLetter2.getText().toString().equals("*") &&
    !wordLetter3.getText().toString().equals("*") &&
    !wordLetter4.getText().toString().equals("*") &&
    !wordLetter5.getText().toString().equals("*") &&    
    !wordLetter6.getText().toString().equals("*") &&
    !wordLetter7.getText().toString().equals("*")){

        if (wordLetter1.getText().toString().equals("") &&
                wordLetter2.getText().toString().equals("") &&
                wordLetter3.getText().toString().equals("") &&
                wordLetter4.getText().toString().equals("") &&
                wordLetter5.getText().toString().equals("") &&  
                wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter1;
        else if (!wordLetter1.getText().toString().equals("") &&
                wordLetter2.getText().toString().equals("") &&
                wordLetter3.getText().toString().equals("") &&
                wordLetter4.getText().toString().equals("") &&
                wordLetter5.getText().toString().equals("") &&  
                wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter2;
        else if (!wordLetter1.getText().toString().equals("") &&
                !wordLetter2.getText().toString().equals("") &&
                wordLetter3.getText().toString().equals("") &&
                wordLetter4.getText().toString().equals("") &&
                wordLetter5.getText().toString().equals("") &&  
                wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter3;
        else if (!wordLetter1.getText().toString().equals("") &&
                !wordLetter2.getText().toString().equals("") &&
                !wordLetter3.getText().toString().equals("") &&
                wordLetter4.getText().toString().equals("") &&
                wordLetter5.getText().toString().equals("") &&  
                wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter4;
        else if (!wordLetter1.getText().toString().equals("") &&
                !wordLetter2.getText().toString().equals("") &&
                !wordLetter3.getText().toString().equals("") &&
                !wordLetter4.getText().toString().equals("") &&
                wordLetter5.getText().toString().equals("") &&  
                wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter5;
        else if (!wordLetter1.getText().toString().equals("") &&
                !wordLetter2.getText().toString().equals("") &&
                !wordLetter3.getText().toString().equals("") &&
                !wordLetter4.getText().toString().equals("") &&
                !wordLetter5.getText().toString().equals("") && 
                wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter6;
        else if (!wordLetter1.getText().toString().equals("") &&
                !wordLetter2.getText().toString().equals("") &&
                !wordLetter3.getText().toString().equals("") &&
                !wordLetter4.getText().toString().equals("") &&
                !wordLetter5.getText().toString().equals("") && 
                !wordLetter6.getText().toString().equals("") &&
                wordLetter7.getText().toString().equals(""))
            return wordLetter7;

    }   
    return null;
}

The above works fine, but I think that must be a more compat way to achive the same with a less lines of code. I haven't much experience on java and I found some answers for similar situations, which I cannot fully understand. I tried to reduse my code for CurrentPos() method with the above code:

public TextView CurrentPos(){

    TextView wordletters[] = {wordLetter1, wordLetter2, wordLetter3,
            wordLetter4, wordLetter5, wordLetter6, wordLetter7};

    TextView currentPos = null;
    for(int i=0; i<wordletters.length; i++){
    if(!wordletters[i].toString().equals(("*")) && wordletters[i].equals("")){      
        currentPos = wordletters[i];
        return currentPos;
        }

        }   
    return null;
}

which gives error NulPointerException. Obviously I'm doing something wrong, which I don't get it. Is my code completely wrong or just something missing?

Upvotes: 1

Views: 86

Answers (1)

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132992

in second way you will need to call getText method for comparing text of TextView's becuase currently you are trying to compare TextView instances from Array as:

for(int i=0; i<wordletters.length; i++){
    if(!wordletters[i].getText().toString().equals(("*")) && 
                       wordletters[i].getText().toString().equals("")){      
        currentPos = wordletters[i];
        return currentPos;
    }

}  

Upvotes: 1

Related Questions