gpt4 book ai didi

java - final 局部变量不能赋值,因为它是在封闭类型中定义的?

转载 作者:行者123 更新时间:2023-11-30 02:10:30 24 4
gpt4 key购买 nike

希望能够在最后创建一个变量,该变量具有我最终将在 TextView 中显示的时间和成本值。不过我的整数遇到了问题。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final int intTime = 30;
final int intCost = 10;

CheckBox CP = (CheckBox)findViewById(R.id.checkPepperoni);
CheckBox CS = (CheckBox)findViewById(R.id.checkSausage);
CheckBox CB = (CheckBox)findViewById(R.id.checkBacon);
CheckBox CM = (CheckBox)findViewById(R.id.checkMushroom);

final ImageView cheese =(ImageView)findViewById(R.id.imgCheese);
final ImageView pepperoni =(ImageView)findViewById(R.id.imgPepperoni);
final ImageView sausage =(ImageView)findViewById(R.id.imgSausage);
final ImageView bacon =(ImageView)findViewById(R.id.imgBacon);
final ImageView mushroom =(ImageView)findViewById(R.id.imgMushroom);

final SharedPreferences sharedPref =PreferenceManager.getDefaultSharedPreferences(this);



CP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
//Pepperoni Listener
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked1) {
// TODO Auto-generated method stub

if(isChecked1){

pepperoni.setImageResource(R.drawable.pepperoni);
intTime = intTime + 6;
intCost = intCost + 5;
}
else{

pepperoni.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;
}

}});

CS.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
//Sausage Listener
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked2) {
// TODO Auto-generated method stub

if(isChecked2){

sausage.setImageResource(R.drawable.sausage);
intTime = intTime + 6;
intCost = intCost + 5;

}
else{

sausage.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;

}

}});

CB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked3) {
// TODO Auto-generated method stub

if(isChecked3){

bacon.setImageResource(R.drawable.bacon);
intTime = intTime + 6;
intCost = intCost + 5;

}
else{

bacon.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;

}

}});

CM.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked4) {
// TODO Auto-generated method stub

if(isChecked4){

mushroom.setImageResource(R.drawable.mushroom);
intTime = intTime + 6;
intCost = intCost + 5;

}
else{

mushroom.setImageResource(0);
intTime = intTime - 6;
intCost = intCost - 5;

}

}});


ImageButton IB = (ImageButton)findViewById(R.id.imgBtnGo);
IB.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String time = Integer.toString(intTime);
String cost = Integer.toString(intCost);

SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("keyTime", time);
editor.putString("keyCost", cost);

startActivity(new Intent(MainActivity.this, ResultActivity.class));

}

});
}

}

我遇到的错误是“无法分配最终局部变量 intCost,因为它是在封闭类型中定义的。”

这是什么意思,有什么方法可以使用所有复选框来更改此变量?

最佳答案

问题的原因是final变量在声明时就应该初始化,不能重新赋值。对于这种情况,最好的办法是在匿名类中创建以最终变量值开头的内部字段,并且该内部字段会定期更新。

例子:

CP.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//Pepperoni Listener
int innerTime = intTime;
int innerCost = intCost;

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked1) {
if(isChecked1) {
pepperoni.setImageResource(R.drawable.pepperoni);
innerTime += 6;
innerCost += 5;
} else {
pepperoni.setImageResource(0);
innerTime -= 6;
innerCost -= 5;
}
}
});

更多信息:

关于java - final 局部变量不能赋值,因为它是在封闭类型中定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com