Android:字符串数组

Posted

技术标签:

【中文标题】Android:字符串数组【英文标题】:Android: String array 【发布时间】:2021-10-30 11:01:07 【问题描述】:

我有一个关于不同字母表的游戏活动是随机可用的,用户会选择其中一些正在制作正确单词的字母。 我制作了单词的字符串数组,即答案 但我想知道如何显示这个答案单词字母并随机添加一些其他字母作为混淆? 就像以 [World] 为例,将它的字母划分为 [W, L, D, O] 并让它们随机显示并让玩家从中选择?

TextView guessItTimer;
CountDownTimer timer;
Random r;
String currentWord;

private int presCounter = 0;
private int maxPresCounter = 4;
private String[] keys = "R", "I", "B", "D", "X";
String dictionary[] = 
        "remember",
        "hungry",
        "crying",
        "sour",
        "sleep",
        "awesome",
        "Seven",
        "color",
        "began",
        "appear",
        "weight",
        "language"
;
TextView textScreen, textQuestion, textTitle;
Animation smallbigforth;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guess_it);

    guessItTimer = findViewById(R.id.guessItTimer);
    smallbigforth = AnimationUtils.loadAnimation(this, R.anim.smallbigforth);

    keys = shuffleArray(keys);
    for (String key : keys) 
        addView(( findViewById(R.id.layoutParent)), key, findViewById(R.id.et_guess));
    
    maxPresCounter = 4;

    resetTimer();


//CountdownTimer
void resetTimer() 
   timer = new CountDownTimer(30150, 1000) 
        @Override
        public void onTick(long l) 
            guessItTimer.setText(String.valueOf(l / 1000));
        
        @Override
        public void onFinish() 
            Toast.makeText(GuessItActivity.this, "Time is over", Toast.LENGTH_SHORT).show();
            startActivity(new Intent(GuessItActivity.this, BossFinalActivity.class));
            finish();
        
    .start();

private String[] shuffleArray(String[] ar) 
    Random rnd = new Random();
    for (int i = ar.length - 1; i > 0; i--) 
        int index = rnd.nextInt(i + 1);
        String a = ar[index];
        ar[index] = ar[i];
        ar[i] = a;
    
    return ar;

private void addView(LinearLayout viewParent, final String text, final EditText editText) 
    LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
    );
    linearLayoutParams.rightMargin = 30;

    final TextView textView = new TextView(this);
    textView.setLayoutParams(linearLayoutParams);
    textView.setBackground(this.getResources().getDrawable(R.drawable.bgpink));
    textView.setTextColor(this.getResources().getColor(R.color.colorPurple));
    textView.setGravity(Gravity.CENTER);
    textView.setText(text);
    textView.setClickable(true);
    textView.setFocusable(true);
    textView.setTextSize(32);

    textQuestion = findViewById(R.id.textQuestionBoss);
    textScreen = findViewById(R.id.gametitle);
    textTitle =  findViewById(R.id.Ammo);

    textView.setOnClickListener(new View.OnClickListener() 

        @SuppressLint("SetTextI18n")
        @Override
        public void onClick(View v) 
            if(presCounter < maxPresCounter) 
                if (presCounter == 0)
                    editText.setText("");
                editText.setText(editText.getText().toString() + text);
                textView.startAnimation(smallbigforth);
                textView.animate().alpha(0).setDuration(300);
                presCounter++;
                if (presCounter == maxPresCounter)
                    doValidate();
            
        
    );

    viewParent.addView(textView);


private void doValidate() 
    presCounter = 0;
    EditText editText = findViewById(R.id.et_guess);
    LinearLayout linearLayout = findViewById(R.id.layoutParent);

    currentWord = dictionary[r.nextInt(dictionary.length)];


    if(editText.getText().toString().equals(currentWord)) 
        //Toast.makeText(GuessItActivity.this, "Correct", Toast.LENGTH_SHORT).show();
        Intent a = new Intent(GuessItActivity.this,BossFinalActivity.class);
        startActivity(a);
        editText.setText("");
     else 
        Toast.makeText(GuessItActivity.this, "Wrong", Toast.LENGTH_SHORT).show();
        editText.setText("");
    
    keys = shuffleArray(keys);
    linearLayout.removeAllViews();
    for (String key : keys) 
        addView(linearLayout, key, editText);
    


public void onBackPressed() 
    timer.cancel();
    this.finish();
    super.onBackPressed();

【问题讨论】:

【参考方案1】:

你可以这样实现

 String a2z = "abcdefghijklmnopqrstuvwxyz"; 
        String answer = "World";
        // lets assume you need 16 char to select from
        ArrayList<Character> chars = new ArrayList<Character>();
        for (int i = 0; i < answer.length(); i++) 
            chars.add(answer.charAt(i));

        
        int dif = 16 - chars.size();
        Random rand = new Random();
        for (int i = 0; i < dif; i++) 
            int ranIndex = rand.nextInt(a2z.length());
            chars.add(a2z.charAt(ranIndex));
        

        Collections.sort(chars);
        System.out.println("nameArray2" + chars.toString());

【讨论】:

以上是关于Android:字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

Android解析字符串的Json数组

如何在android中将json对象从json数组转换为字符串数组

JAVA/ANDROID 数组转换为LIST

将EditText数组转换为字符串数组 - Kotlin Android

Android:字符串数组

Android将字符串拆分为数组[重复]