App crashing at the end of array

前端 未结 1 1669
独厮守ぢ
独厮守ぢ 2021-01-22 04:53

My app is crashing at the end of the array in bluestacks. I have no idea why.

When I click the next button at the end of the array, the app crashes. I also tested it on

相关标签:
1条回答
  • 2021-01-22 05:42

    You'll need to rearrange your code from this:

                            i++;
    
                            element.setImageResource(image_elements[i]);
                            name.setImageResource(image_names[i]);
    
                            i %= image_elements.length;
    

    to this:

                            i++;
                            i %= image_elements.length;
    
                            element.setImageResource(image_elements[i]);
                            name.setImageResource(image_names[i]);
    

    What happens otherwise is that the index is incremented beyond the boundaries of the array, and that is corrected afterwards with the modulus operator. You'll need to the the correction before you use the index.

    i %= image_elements.length in this particular case, is essentially the same as

    if( i == image_elements.length ) {
        i = 0;
    }
    

    Arrays indices go from 0 to length-1.

    You could get rid of the arrays entirely by looking up the resources by name, such as this:

    final static int MAX_ELEMENTS = 88; // this includes 0..87
    private int index = 0;
    
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.practice);
    
            final ImageView element = (ImageView) findViewById(R.id.element);
            final ImageView name = (ImageView) findViewById(R.id.name);
            final Resources res = this.getResources();
            final String pkgName = this.getPackageName();
    
            Button nextButton = (Button) findViewById(R.id.buttonNext);
            nextButton.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                            final int imgId = res.getIdentifier( "spr_elements_" + index, "drawable", pkgName );
                            final int nameId = res.getIdentifier( "spr_name_" + index, "drawable", pkgName );
                            element.setImageResource( imgId );
                            name.setImageResource( nameId );
    
                            index = (index+1) % MAX_ELEMENTS;
                    }
            });
    }
    
    0 讨论(0)
提交回复
热议问题