2016-11-27 42 views
0

我有一個隨機值應用於四個隨機按鈕的程序。其中一個隨機值id顯示在四個按鈕的頂部。如果用戶點擊包含顯示號碼的按鈕(loadG4),他們會得到一個點。我遇到的問題是,一旦用戶點擊了正確的按鈕並生成了新的數字,rbvalue按鈕可能並不全都與loadG4的值不同。從我的代碼中可以看出,它們不應該是平等的。下面的代碼:爲什麼第一次點擊後隨機按鈕遊戲存在缺陷?

int score = 0; 
Random random = new Random(); 
int rbselector = random.nextInt(4); //These four initiations are out onCreate. 
int loadG4 = random.nextInt(10); 


final Button[] selectrb = new Button[4]; 
    selectrb[0] = rb1; 
    selectrb[1] = rb2; 
    selectrb[2] = rb3; 
    selectrb[3] = rb4; 


    final Button loseStarter4 = (Button) findViewById(R.id.Starter4); 
    loseStarter4.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      infoG4.setVisibility(View.GONE); 
      loseStarter4.setVisibility(View.GONE); 
      rb1.setVisibility(View.VISIBLE); 
      rb2.setVisibility(View.VISIBLE); 
      rb3.setVisibility(View.VISIBLE); 
      rb4.setVisibility(View.VISIBLE); 


      rbselector = random.nextInt(4); 

      final TextView number = (TextView) findViewById(R.id.number); 
      number.setText(""+ loadG4); 


      for(int allrbA=0; allrbA<4; allrbA++) { 
       int rbvalue = random.nextInt(9); 
       if (rbvalue == loadG4) { 
        rbvalue=9; 
       } 
       selectrb[allrbA].setText(""+rbvalue); 
      } 
      selectrb[rbselector].setText(""+ loadG4); 


       for (int allrbA = 0; allrbA < 4; allrbA++) { 
       selectrb[allrbA].setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
          Button clicked = (Button) v; 
          String clickVal = (String) clicked.getText(); 
          int finalClick = Integer.valueOf(clickVal); 

          if (finalClick == loadG4) { 
           score++; 
           for (int allrbA = 0; allrbA < 4; allrbA++) { 
            int rbvalue = random.nextInt(9); 
            if (rbvalue == loadG4) { 
             rbvalue=9; 
            } 
            selectrb[allrbA].setText("" + rbvalue); 
           } 
           int loadG4 = random.nextInt(10); 
           number.setText("" + loadG4); 
           int rbselector = random.nextInt(4); 
           selectrb[rbselector].setText("" + loadG4); 
          } 
        } 
       }); 
       } 

我有它這樣,如果一個rbvalue等於loadG4,它被設置爲= 9。出於某種原因,之後的第一個正確的點擊有可能是一個rbvalue可以等於loadG4。

此外,loadG4的值在這裏也不會改變。爲什麼是這樣?

感謝任何人都可以通過這個解釋並解釋爲什麼a)rbvalue在第一次正確點擊後並不總是與loadG4不同,b)爲什麼loadG4保持相同的數字。

非常感謝提前。

回答

1

在你的代碼中,你正在初始化loadG4和rbselector。相反,你應該使用全局變量。

//Declare this globally. Not in oncreate. 
int score = 0; 
Random random = new Random(); 
int rbselector = random.nextInt(4); 
int loadG4 = random.nextInt(10); 


final Button[] selectrb = new Button[4]; 
selectrb[0] = rb1; 
selectrb[1] = rb2; 
selectrb[2] = rb3; 
selectrb[3] = rb4; 


final Button loseStarter4 = (Button) findViewById(R.id.Starter4); 
loseStarter4.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     infoG4.setVisibility(View.GONE); 
     loseStarter4.setVisibility(View.GONE); 
     rb1.setVisibility(View.VISIBLE); 
     rb2.setVisibility(View.VISIBLE); 
     rb3.setVisibility(View.VISIBLE); 
     rb4.setVisibility(View.VISIBLE); 


     rbselector = random.nextInt(4); 

     final TextView number = (TextView) findViewById(R.id.number); 
     number.setText(""+ loadG4); 


     for(int allrbA=0; allrbA<4; allrbA++) { 
      int rbvalue = random.nextInt(9); 
      if (rbvalue == loadG4) { 
       rbvalue+=1; 
      } 
      selectrb[allrbA].setText(""+rbvalue); 
     } 
     selectrb[rbselector].setText(""+ loadG4); 


      for (int allrbA = 0; allrbA < 4; allrbA++) { 
      selectrb[allrbA].setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
         Button clicked = (Button) v; 
         String clickVal = (String) clicked.getText(); 
         int finalClick = Integer.valueOf(clickVal); 

         if (finalClick == loadG4) { 
          score++; 
          loadG4 = random.nextInt(10); //removed declaration 
          for (int allrbA = 0; allrbA < 4; allrbA++) { 
           int rbvalue = random.nextInt(9); 
           if (rbvalue == loadG4) { 
            rbvalue+=1; // better method to prevent duplicates for 9 
           } 
           selectrb[allrbA].setText("" + rbvalue); 
          } 
          number.setText("" + loadG4); 
          rbselector = random.nextInt(4); 
          selectrb[rbselector].setText("" + loadG4); 
         } 
       } 
      }); 
      } 

現在你的代碼應該工作。

+0

感謝這解決了loadG4相同的數字問題,儘管rbvalue和loadG4之間仍然存在相同的值。如何不重新初始化loadG4和rbselector變量解決我的問題?我不明白爲什麼這會使它工作。 – H3ll0

+0

rbvalue和loadG4之間的相同值是什麼意思?你是否每次都得到相同的一組按鈕值?或者至少在幾次之後?如果是這樣,請將nextInt值增加到更大的值。所以會產生更多的隨機數字。請清楚解釋你的問題。 –

+0

你爲什麼不重新初始化代碼的建議? – H3ll0

相關問題