2013-12-23 2 views
1

Я новичок в android, и я пытаюсь создать игру. Это очень просто Угадай номер игры. Я хочу изменить значение правильного ответа, если он правильно догадался. Я не уверен, как это сделать. его код для моего создания:Могу ли я изменить значение final int

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"); 
      }} 
     } 
    }); 
} 

Как изменить правильный ответ? Я вынужден назвать его окончательным и не могу изменить значение.

+2

«Могу ли я изменить значение окончательного int» - № – Maroun

+0

объявить значение int - ** глобально ** –

+0

_ «Я вынужден назвать его окончательным» _ как вы были вынуждены? – Baby

ответ

7
Can i change value of final int?? 

Для этого ответа НЕТ ..

Я понимаю вашу проблему, которую вы используете его в анонимном внутреннем классе так затмить силой просить вас, чтобы сделать его final..So вы хотите использовать correctAnswer значения в пределах анонимный внутренний класс, так удалить final и определить свой CorrectAnswer глобально нравится ..

private int correctAnswer; 

, то вы можете изменить значение, и вы можете получить доступ к нему в анонимном внутреннем классе

+1

+1 для понимания проблемы и объяснения причин и способов ее решения. –

+0

Я пробовал это, но внутри onclicklistener он говорит Невозможно ссылаться на не конечную переменную correctAnswer внутри внутреннего класса, определенного другим методом –

+0

@ArjunKrishnan определяет его вне метода onCreate..то не спрашивает вас .. –

-1

Если мы объявим переменную как final, мы не сможем ее изменить.

Удалить ключевое слово final, после чего вы можете изменить его значение.

+1

Он не может удалить финальный, если хочет использовать его в прослушивателе кликов –

1

final для var, выделенного в стеке, вы никогда не сможете изменить его, я имею в виду четыре вида восемь основных типов var. final для ссылок (или указателей), вы никогда не сможете изменить ссылку, но что означает эталонная точка, вы можете ее изменить. например, final List list = new ArrayList(); список является окончательным, он должен быть одним ArrayList, но что в списке, вы можете его изменить.

0

Вы не можете изменить значение конечного междунар потому, что Java используется ключевое слово «окончательное» для объявления констант & если вы пытаетесь изменить его, то компилятор выдаст ошибку!

Или его лучше не делать окончательным!

0

Что вам нужно, это контейнер:

public class IntContaner { 
    public int value; 

    public IntContainer(int initialValue) { 
     value = initialValue; 
    } 
} 

И в вашем коде, вы пишете:

final IntContainer correctAnswer=new IntContainer(rand.nextInt(100)+1); 

... который позволяет изменять содержимое "CorrectAnswer" в OnClickListener ,

Смежные вопросы