我遇到变量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);
}
}
答案 0 :(得分:5)
声明final
表示该变量的值只能分配一次。删除它以解决您的问题。
更改
public final int c = 0;
要
public int c; // You don't need = 0 as Java assigns that value by default
答案 1 :(得分:2)
来自官方文件:
最终变量
变量可以声明为final。最终变量可能只是 分配给一次。声明变量final可以起到很大作用 文档,其价值不会改变,可以帮助避免 编程错误。
这意味着,由于您将变量声明为c
,因此您无法更改final
的值。
所以,改变
public final int c=0;
到
public int c=0;
答案 2 :(得分:0)
您只需删除final
修饰符,但我认为您有更严重的问题,即onClick
内的逻辑。一旦单击它,将执行所有if块,因为通过向c
添加1满足每个if条件。你确定吗 ?我想你想要的是这样的:
switch (c){
case 0: img.setImageResource(R.drawable.pe2);break;
case 1: img.setImageResource(R.drawable.pe3);break;
...
}
c++;
答案 3 :(得分:0)
当使用final
声明变量时,它几乎意味着它是一个常量,并且它的值无法更改。顺便问一下,你甚至在哪里宣布它?