在一个字符串的 for 循环中使用字符串替换方法

我目前正在使用Android Studio 3.2创建一个包含标志猜测游戏的移动应用程序。对于其中一个游戏,我必须显示一个随机标志和相应的名称(用破折号覆盖)。用户可以在下面的编辑文本框中输入一个字母,然后单击提交按钮。如果用户得到正确的答案,则带有该字母的破折号将被删除以显示实际的字母。

显示应用 UI 的图像

对我来说,问题始于单独更换每个破折号。当我输入一封信并提交它时,所有的破折号都会变成同一个字母。

package com.example.anisa.assignment1;


import android.content.Intent;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ImageView;

import android.widget.TextView;

import java.util.Random;


public class GuessHints extends AppCompatActivity

{

    private ImageView flag;

    private int randIndex;

    public char[] answers = {};


    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_guess_hints);

        displayHintsFlag();

        splitCountryNameLetters();

    }


    public void displayHintsFlag()

    {

        flag = findViewById(R.id.displayHintsFlag);

        Random r = new Random();

        int min = 0;

        int max = 255;

        randIndex = r.nextInt(max-min) + min;

        Country countries = new Country();

        int randomHintsFlagImage = countries.countryImages[randIndex];

        flag.setImageResource(randomHintsFlagImage);

    }


    public void splitCountryNameLetters()

    {

        Country countries = new Country();

        String randomHintsFlagName = countries.countryNames[randIndex];

        TextView hintsQuestion = (TextView) findViewById(R.id.countryDashesDisplay);

        String hintsQuestionString;

        int flagNameLength = randomHintsFlagName.length();

        char letter;


        for (int i = 0; i < flagNameLength; i++)

        {

            Log.d("Flag: ",randomHintsFlagName + "");


我知道问题在于使用k索引,但不知道如何解决这个问题,因为它在for循环中。


jeck猫
浏览 133回答 2
2回答

MMTTMM

假设您有一个启动,例如 .用户输入字母,应该发生的事情是StringItaliai------ > I---i-让我们首先将待猜到的版本转换为虚线版本Stringfinal String toBeGuessed = "Italia";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Italiafinal String dashed = toBeGuessed.replaceAll(".", "-");&nbsp; // ------现在,用户以猜测的字母形式输入。我们将其转换为小写字母,以便以后进行比较。ifinal char letter = Character.toLowerCase('i');我们需要做的是更新虚线,为此我们将使用.使用 a 允许我们设置单个字符。StringStringBuilderStringBuilder// Create the StringBuilder starting from ------final StringBuilder sb = new StringBuilder(dashes);// Loop the String "Italia"for (int i = 0; i < toBeGuessed.length(); i++) {&nbsp; &nbsp; final char toBeGuessedChar = toBeGuessed.charAt(i);&nbsp; &nbsp; // Is the character at the index "i" what we are looking for?&nbsp; &nbsp; // Remember to transform the character to the same form as the&nbsp; &nbsp; // guessed letter, maybe lowercase&nbsp; &nbsp; final char c = Character.toLowerCase(toBeGuessedChar);&nbsp; &nbsp; if (c == letter) {&nbsp; &nbsp; &nbsp; &nbsp; // Yes! Update the StringBuilder&nbsp; &nbsp; &nbsp; &nbsp; sb.setCharAt(i, toBeGuessedChar);&nbsp; &nbsp; }}// Get the final resultfinal String result = sb.toString();result将是 .I---i-

慕妹3242003

就像在Java中一样,字符串是不可变的,因此您无法用另一个字符串替换任何字符串。&nbsp;hintsQuestionString = hintsQuestionString.replace(hintsQuestionString.charAt(k), letterChar);上面的行在Java中不起作用。您可以使用 StringBuilder 类来替换字符串或您不必吐出字符串,因为它在Java中不起作用,因为Java中的String类是不可变的。您只需在文本视图中设置文本即可你从用户那里得到的这个字符串 String hintsQuestionString = hintsQuestion.getText().toString();然后使用equals方法比较整个字符串,如果输入的字符串匹配,则必须设置文本。我已经自己获取了 countryName 变量,您必须将此字符串替换为您采用的变量。if(countryName.equals(hintsQuestionString))&nbsp; {&nbsp; &nbsp; hintsQuestion.setText(hintsQuestionString);&nbsp; }我希望,这会帮助你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java