2016-04-01 1 views
-1

Eşleşen oyun için aynı sözcük olmayan iki dize bağlamaya çalışıyorum. Ben oluşturduğum, aynı metinle çalıştığım bir kod var. Örneğin, ilk seçim = "word1" ise, ikinci seçimin "word1" kelimesi aynı olmalıdır. İlk seçim = "word1" ve ikinci seçim = "definition1" istiyorum. Daha fazla ayrıntı için lütfen numaralı telefon yardımına aşağıdaki koddan ulaşabilirsiniz.Aynı sözcük olmayan iki dize nasıl bağlanır

protected void onCreate(Bundle savedInstanceState) { 

    text[0] = "word1"; 
    text[1] = ("definition1"); 


    twotext[0] = "word2"; 
    twotext[1] = ("definition2"); 


    threetext[0] = "word3"; 
    threetext[1] = ("definition3"); 


    foretext[0] = "word4"; 
    foretext[1] = ("definition4"); 


    } 
    public void setBoard() 
    { 
     board = new String[8]; 
     //Assigns each image to two random positions 
     for(int i = 0; i < 2; i++) 
     { 
      int pic1 = (int)(Math.random()*board.length); 
      int pic2 = (int)(Math.random()*board.length); 
      int pic3 = (int)(Math.random()*board.length); 
      int pic4 = (int)(Math.random()*board.length); 


      while(board[pic1]!=null) 
      { 
       pic1 = (int)(Math.random()*board.length); 
      } 
      board[pic1] = text[i]; 


      while(board[pic2]!=null) 
      { 
       pic2 = (int)(Math.random()*board.length); 
      } 
      board[pic2] = twotext[i]; 



      while(board[pic3]!=null) 
      { 
       pic3 = (int)(Math.random()*board.length); 
      } 
      board[pic3] = threetext[i]; 


      while(board[pic4]!=null) 
      { 
       pic4 = (int)(Math.random()*board.length); 
      } 
      board[pic4] = foretext[i]; 





     } 


     //Sets the question mark image to each ImageView and makes each clickable 
     for(int i = 0; i < board.length; i++) 

     { 
      pics[i].setText(board[i]); 

     } 



     for(Button i: pics) 

     { 

      i.setClickable(true); 
     } 
    } 

//If an image is clicked it will "flip" to reveal the image below 
    //If the first and second pick match, 100 points are awarded, otherwise 200 are deducted 
    public void click(View v){ 

     switch (v.getId()) 
     { 
      case R.id.i0: 
       pics[0].setText(board[0]); 
       if(firstPick) pick1 = 0; 
       else pick2 = 0; 
       break; 

      case R.id.i1: 
       pics[1].setText(board[1]); 
       if(firstPick) pick1 = 1; 
       else pick2 = 1; 
       break; 

      case R.id.i2: 
       pics[2].setText(board[2]); 
       if(firstPick) pick1 = 2; 
       else pick2 = 2; 
       break; 

      case R.id.i3: 
       pics[3].setText(board[3]); 
       if(firstPick) pick1 = 3; 
       else pick2 = 3; 
       break; 

      case R.id.i4: 
       pics[4].setText(board[4]); 
       if(firstPick) pick1 = 4; 
       else pick2 = 4; 
       break; 

      case R.id.i5: 
       pics[5].setText(board[5]); 
       if(firstPick) pick1 = 5; 
       else pick2 = 5; 
       break; 

      case R.id.i6: 
       pics[6].setText(board[6]); 
       if(firstPick) pick1 = 6; 
       else pick2 = 6; 
       break; 

      case R.id.i7: 
       pics[7].setText(board[7]); 
       if(firstPick) pick1 = 7; 
       else pick2 = 7; 
       break; 
     } 

     if(!firstPick) 
     { 
      pics[pick2].setClickable(false); 

      if(board[pick1]==board[pick2]) { 



        matches++; 
        score += 100; 
        layout.setBackgroundColor(Color.GREEN); 
        final Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          layout.setBackgroundColor(Color.WHITE); 
         } 
        }, 500); 
       } 

............ ayarladığınız tüm k

  case R.id.ik: 
      pics[k].setText(board[k]); 

için ............

+0

Sözcüklerde çoğaltma yoksa, 'HashMap' kullanmanızı öneririm. - biçimindedir. Yani almak istiyorsanız, sadece girin. – Kae10

+0

smth to smth öğesinin eşleşmesi, eşleştirdiğiniz bir kümeye bir kümeden = çoğaltma yok. Tanım olarak 2 farklı şeyle bir şeyleri "eşleştiremezsiniz". – iantonuk

+0

Bu satırda gördüğüm sorun "if (board [pick1] == board [pick2])". Seçimin ilkini seçtiğimde, ikinci kelime aynı kelime olmalı. İkinci kelimeyi değiştirmeye ihtiyacım var. örneğin "cümle" == "sözler". Bu kodda aynı kelimeyi "cümle" = "cümle" gibi iki seçim olarak tutmak zorundayım. bana yardım ettiğin için teşekkürler. –

cevap

1

aynı eski metin, çünkü textof (resimler [i]) = tahta [i]:

 for(int i = 0; i < board.length; i++) 
    { 
     pics[i].setText(board[i]); 
    } 

sen (farklı maç istediklerini belirtti sen misin maçlar sizin predifined maçlar olduğunu

  case R.id.ik: 
      pics[k].setText(board[matches.get(board[i])]); 

) önceden tanımlanmış:

HashMap<String, String> matches = new HashMap<String, String>(); 

ve sizin gibi eşlemeleriniz herhangi bir şekilde koymak

for(int i = 1; i <= 4; i++) 
    matches.put("word"+i, "definition" + i); 

Not: tahta parçası için kod aşırı , OnCreate'daki her şeyi çok daha iyi bir anlayışla birkaç satırda gerçekleştirebilirsiniz.

+0

Merhaba bedbad. Sorunu bulmak için bana yardımcı olması için aşırı yaptım. Bu satırda fark ettiğim sorun "if (board [pick1] == board [pick2])". Seçimin ilkini seçtiğimde, ikinci kelime aynı kelime olmalı. İkinci kelimeyi değiştirmeye ihtiyacım var. örneğin "cümle" == "sözler". Bu kodda aynı kelimeyi "cümle" = "cümle" gibi iki seçim olarak tutmak zorundayım. bana yardım ettiğin için teşekkürler. –

+0

iyi 100 kere aynı şeyi yapıyorsun. Bu yüzden kodunuzu takip etmek gerçekten zor ve nerede olduğunu söylemek: hata ". sadece 1 liste dize ve başka bir seçim için tutmak ve 1 rasgele sayı atamak için kullanmayın. Ben bu satırın şekilde kodunuzu yeniden yapabilirim Tamamen doğru olması gerekir.Tüm kodlar dürüst bir şekilde berbattır. – iantonuk

+0

Neyse, kullanın (board [2] == match.get (board [1])) bunu yapacak – iantonuk