41

私は問題があります。このaXcFg3s2のようなランダムな文字列を描きたい. 私は何を悪いですか?どのように私の変更random()

private String random;
private String charsEntered;
private EditText et;
private Button ok;
CaptchaInterface.OnCorrectListener mCorrectListener;

public void setOnCorrectListener(CaptchaInterface.OnCorrectListener listener) {
    mCorrectListener = listener;
}

public TextCaptcha(Context context) {
    super(context);
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
}

public static String random() {
    Random generator = new Random();
    String x = (String) (generator.nextInt(96) + 32);
    return x;
}

public void onCreate(Bundle icicle) {
    setContentView(R.layout.main);
    random = random();
    TextView display = (TextView) findViewById(R.id.textView1);
    display.setText("Random Number: " + random); // Show the random number
    et = (EditText) findViewById(R.id.etNumbers);
    ok = (Button) findViewById(R.id.button1);
    ok.setOnClickListener(this);

}

public void onClick(View arg0) {
    // TODO Auto-generated method stub
    try {
        charsEntered = et.getText().toString();
    } catch (NumberFormatException nfe) {
        Toast.makeText(et.getContext(), "Bla bla bla",
                Toast.LENGTH_LONG).show();
    }

    if (random == charsEntered) {
        Toast.makeText(et.getContext(), "Good!", Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(et.getContext(), "Bad!", Toast.LENGTH_LONG).show();
    }
}
4

10 に答える 10

74

問題は、ループを使用する代わりに 1 つの文字のみを処理したことです。

ランダムな文字列に含めることを許可するすべての文字を含む文字の配列を作成し、ループで配列からランダムな位置を取得して、それを stringBuilder に追加できます。最後に、stringBuilder を文字列に変換します。


編集:これが私が提案した単純なアルゴリズムです:

private static final String ALLOWED_CHARACTERS ="0123456789qwertyuiopasdfghjklzxcvbnm";

private static String getRandomString(final int sizeOfRandomString)
  {
  final Random random=new Random();
  final StringBuilder sb=new StringBuilder(sizeOfRandomString);
  for(int i=0;i<sizeOfRandomString;++i)
    sb.append(ALLOWED_CHARACTERS.charAt(random.nextInt(ALLOWED_CHARACTERS.length())));
  return sb.toString();
  }

そしてコトリンで:

companion object {
    private val ALLOWED_CHARACTERS = "0123456789qwertyuiopasdfghjklzxcvbnm"
}

private fun getRandomString(sizeOfRandomString: Int): String {
    val random = Random()
    val sb = StringBuilder(sizeOfRandomString)
    for (i in 0 until sizeOfRandomString)
        sb.append(ALLOWED_CHARACTERS[random.nextInt(ALLOWED_CHARACTERS.length)])
    return sb.toString()
}
于 2012-08-24T20:27:58.513 に答える
59

コードにはいくつか問題があります。

int から文字列にキャストすることはできません。代わりに char にキャストしてください。ただし、これは単一の文字のみを提供するため、代わりに文字列の長さに対して乱数を生成できます。次に for ループを実行して、ランダムな文字を生成します。StringBuilder も定義し、それに文字を追加してから、toString()メソッドを使用してランダムな文字列を取得できます

例:

public static String random() {
    Random generator = new Random();
    StringBuilder randomStringBuilder = new StringBuilder();
    int randomLength = generator.nextInt(MAX_LENGTH);
    char tempChar;
    for (int i = 0; i < randomLength; i++){
        tempChar = (char) (generator.nextInt(96) + 32);
        randomStringBuilder.append(tempChar);
    }
    return randomStringBuilder.toString();
}

random.compareTo()また、 ==ではなく使用する必要があります

于 2012-08-24T20:39:18.747 に答える
52

UUID をインポートする必要があります。ここにコードがあります

import java.util.UUID;

id = UUID.randomUUID().toString();
于 2015-11-06T09:52:21.887 に答える
11

これは、目的の文字と目的の長さでランダムな文字列を生成する方法です

          char[] chars1 = "ABCDEF012GHIJKL345MNOPQR678STUVWXYZ9".toCharArray();
                                StringBuilder sb1 = new StringBuilder();
                                Random random1 = new Random();
                                for (int i = 0; i < 6; i++)
                                {
                                    char c1 = chars1[random1.nextInt(chars1.length)];
                                    sb1.append(c1);
                                }
                                String random_string = sb1.toString();  
于 2014-09-08T10:29:21.373 に答える
0

int を String にキャストすることはできません。試す:

 Random generator = new Random();
 String x = String.valueOf (generator.nextInt(96) + 32);
于 2012-08-24T20:27:33.227 に答える
0
final  String[] Textlist = { "Text1", "Text2", "Text3"};

TextView yourTextView = (TextView)findViewById(R.id.yourTextView);

Random random = new Random();

String randomText = TextList[random.nextInt(TextList.length)];

yourTextView.setText(randomText);
于 2015-06-26T12:59:42.860 に答える