【问题标题】:Android studio variable incrementation issuesAndroid studio 变量增量问题
【发布时间】:2015-05-06 15:53:38
【问题描述】:

我遇到了变量 c 的问题。一个错误:

错误:(34, 17) 错误: 无法为最终变量 c 赋值

一直让我很烦。我是一个新的 android studio 用户,我想解决这个问题。带有红色下划线的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);
}
}

【问题讨论】:

标签: java android variables android-studio increment


【解决方案1】:

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

改变

public final int c = 0;

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

【讨论】:

    【解决方案2】:

    来自官方文档:

    最终变量

    变量可以声明为final。最终变量只能是 分配给一次。声明一个变量 final 会很有用 其价值不会改变并且可以帮助避免 编程错误。

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

    所以,改变

    public final int c=0;
    

    public int c=0;
    

    【讨论】:

      【解决方案3】:

      您只需要删除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++;
      

      【讨论】:

        【解决方案4】:

        当一个变量用final 声明时,它几乎意味着它是一个常量,它的值不能改变。顺便说一句,你在哪里声明呢?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-27
          • 2014-06-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多