我是Android新手,我正在尝试制作游戏。这是一个非常简单的猜数字游戏。如果用户猜对了,我想改变正确答案的值。我不确定该怎么做。他是我创建的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button subm = (Button) findViewById(R.id.button1);
final TextView tv1 =(TextView) findViewById(R.id.textView1);
final EditText userG=(EditText)findViewById(R.id.editText1);
Random rand=new Random();
final int correctAnswer=rand.nextInt(100)+1;
subm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int userNum=Integer.parseInt(userG.getText().toString());
if(userNum>100 || userNum<0){
tv1.setText("Enter a number between 1 and 100");
}
else{
if(userNum==correctAnswer){
tv1.setText("YEAH! You got it right");
}
else if(userNum>correctAnswer){
tv1.setText("Sorry,Your guess is too high");
}
else if(userNum<correctAnswer){
tv1.setText("Sorry,Your guess is too low");
}}
}
});
}
如何更改correctAnswer?我被迫称之为最终,不能改变价值。
答案 0 :(得分:9)
Can i change value of final int??
对于这个答案是否定的..
我可以理解你在匿名内部类中使用它的问题所以eclipse强行要求你让它成为最终的..所以你想在匿名内部类中使用correctAnswer
值,所以删除final
并在全球范围内定义正确的答案,如..
private int correctAnswer;
然后您可以更改值,您可以在匿名内部类
中访问它答案 1 :(得分:1)
最后在堆栈中分配var,你永远不能改变它,我的意思是四种八种基本类型var。 对于引用(或指针)的final,你永远不能更改引用,但是引用的意思是什么,你可以改变它。 例如,final List list = new ArrayList(); list是final,它必须是一个ArrayList,但是在列表中,你可以改变它。
答案 2 :(得分:0)
您无法更改final int的值,因为Java使用关键字“ final ”来声明常量&amp;如果您尝试修改它,那么编译器将生成错误!
或者最好不要让它最终!
答案 3 :(得分:0)
您需要的是一个容器:
public class IntContaner {
public int value;
public IntContainer(int initialValue) {
value = initialValue;
}
}
在你的代码中,你写道:
final IntContainer correctAnswer=new IntContainer(rand.nextInt(100)+1);
...允许您更改OnClickListener中“correctAnswer”的内容。
答案 4 :(得分:-1)
如果我们将变量声明为final
,我们就无法更改其值。
删除final
关键字,然后您可以更改其值。