Android Studio变量增量问题



我有变量c的问题。错误:

错误:(34,17)错误:无法为最终变量C

分配值

一直困扰着我。我是新鲜的Android工作室用户,我想解决此问题。用红色c强调仅在我想增加的onClick方法中。

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class plane extends ActionBarActivity {
public final int c=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide();
    setContentView(R.layout.activity_plane);
    final ImageView img=(ImageView)findViewById(R.id.iv);

    img.setImageResource(R.drawable.pe1);

    Button next=(Button)findViewById(R.id.btn_next);
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(c==0){
            img.setImageResource(R.drawable.pe2);
            c=c+1;}
            if (c==1){
                img.setImageResource(R.drawable.pe3);
                c=c+1;}
            if (c==2){
                img.setImageResource(R.drawable.pe4);
                c=c+1;}
            if (c==3){
                img.setImageResource(R.drawable.pe5);
                c=c+1;}
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_plane, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

声明 final表示该变量的值只能分配一次。删除它以解决您的问题。

更改

public final int c = 0;

to

public int c; // You don't need = 0 as Java assigns that value by default

来自官方文档:

最终变量

可以声明最终变量。最终变量可能仅是 分配给一次。声明变量最终可以用作有用的 文献证明其价值不会改变并可以帮助避免 编程错误。

这意味着,您无法更改c的值,因为您将变量声明为final

所以,更改

public final int c=0;

to

public int c=0;

您只需要删除final修饰符,但我认为您有更严重的问题,这是onClick中的逻辑。单击后,将执行所有if块,因为每个IF条件都可以通过将1添加到c来满足条件。你确定吗 ?我认为您想要的是这样的东西:

switch (c){
   case 0: img.setImageResource(R.drawable.pe2);break;
   case 1: img.setImageResource(R.drawable.pe3);break;
   ...
} 
c++;

final声明变量时,这几乎意味着它是一个常数,并且它的值无法更改。顺便说一句,您甚至在哪里宣布它?

最新更新