baron dune
baron dune

Reputation: 367

How can I make this better

Ok here I have a switch case statement which is falling through and trying every option. Basically I want something that if the user enters the letter A in the textbox the background will change to b! if they dont enter the letter A then I want it to stop executing the code. But what has been happening is if the user enters lets say for example the letter Q when the background is letter A then the background will change to letter R instead of telling the user that they are wrong. basically I would like to know how I can stop the background from changing if the user does not enter the letter they are on here is the code.

     public void afterTextChanged(Editable s) {
                char ch = words.getText().toString().charAt(0);

                switch(ch - 'A') {

                case 0: 
                    //A;

                    gestureViewer.setBackgroundResource(R.drawable.lettersb);

                    break;
                case 1:
                    gestureViewer.setBackgroundResource(R.drawable.lettersc);
                    break;
                case 2:
                    gestureViewer.setBackgroundResource(R.drawable.lettersd);

                    break;
                case 3:
                    gestureViewer.setBackgroundResource(R.drawable.letterse);

                    break;
                case 4:
                    gestureViewer.setBackgroundResource(R.drawable.lettersf);
                    break;
                case 5:
                    gestureViewer.setBackgroundResource(R.drawable.lettersg);
                break;
                case 6:
                    gestureViewer.setBackgroundResource(R.drawable.lettersh);
                    break;
                case 7:
                    gestureViewer.setBackgroundResource(R.drawable.lettersi);
                    break;
                case 8:
                    gestureViewer.setBackgroundResource(R.drawable.lettersj);
                    break;
                case 9:
                    gestureViewer.setBackgroundResource(R.drawable.lettersk);
                    break;
                case 10:
                    gestureViewer.setBackgroundResource(R.drawable.lettersl);
                    break;
                case 11:
                    gestureViewer.setBackgroundResource(R.drawable.lettersm);
                    break;
                case 12:
                    gestureViewer.setBackgroundResource(R.drawable.lettersn);
                    break;
                case 13:
                    gestureViewer.setBackgroundResource(R.drawable.letterso);
                    break;
                case 14:
                    gestureViewer.setBackgroundResource(R.drawable.lettersp);
                    break;
                case 15:
                    gestureViewer.setBackgroundResource(R.drawable.lettersq);
                    break;
                case 16:
                    gestureViewer.setBackgroundResource(R.drawable.lettersr);
                    break;
                case 17:
                    gestureViewer.setBackgroundResource(R.drawable.letterss);
                    break;
                case 19:
                    gestureViewer.setBackgroundResource(R.drawable.letterst);
                    break;
                case 20:
                    gestureViewer.setBackgroundResource(R.drawable.lettersu);
                    break;
                case 21:
                    gestureViewer.setBackgroundResource(R.drawable.lettersv);
                    break;
                case 22:
                    gestureViewer.setBackgroundResource(R.drawable.lettersw);
                    break;
                case 23:
                    gestureViewer.setBackgroundResource(R.drawable.lettersx);
                    break;
                case 24:
                    gestureViewer.setBackgroundResource(R.drawable.lettersy);
                break;
                case 25:
                    gestureViewer.setBackgroundResource(R.drawable.lettersz);
                    break;

would it be better if I set the pictures in an array and then went from there? Ive tried including If switch case, but it didnt work at all....

Upvotes: 0

Views: 98

Answers (3)

Vyacheslav Shylkin
Vyacheslav Shylkin

Reputation: 9791

Try:

 public void afterTextChanged(Editable s) {
      char ch = words.getText().toString().charAt(0);
      int id = getResources().getIdentifier("letters" + ch, "drawable",  context.getPackageName())
      gestureViewer.setBackgroundResource(id);
 }

}

Upvotes: 0

devsnd
devsnd

Reputation: 7722

You could, for example, put all the R.drawable.abc inside an Array and then address its index.

int[] bgImg = {R.drawable.a, ... , R.drawable.z}
char ch = words.getText().toString().toUpperCase().charAt(0);

int index = ch - 'A';
if(index > 0 && index < bgImg.length){
    gestureViewer.setBackgroundResource(bgImg[index]);
} else {
    gestureViewer.setBackgroundResource(R.drawable.standardImage);
}

Also note, that I'm using toUpperCase() to make sure you can substract the capital 'A'

Upvotes: 0

amit
amit

Reputation: 178421

I'd pre-populae an array and invoke:

gestureViewer.setBackgroundResource(myArray[ch - 'A']);

It will make your code much more readable.

You can also do it with a Map<Character,MyImage> - it might allow you to add more features easily in the future.
If you do that, invokation will be using

gestureViewer.setBackgroundResource(myMap.get(ch));

Note that the array/map needs to be populated only once in the application's runtime.

Upvotes: 2

Related Questions