簡體   English   中英

如何在Android / Java中根據特定的起始/結束號正確生成隨機整數?

[英]How do I properly generate a random integer based on a specific start/end number in Android/Java?

我正在嘗試創建一個Android應用,該應用接受用戶輸入的“從”數字和“至”數字(一個范圍),然后從該范圍內生成一個隨機整數。 我正在使用2個EditText,其number inputType以便用戶可以輸入其唯一值,然后我嘗試在相應的Java文件(兩個文件均附在下面)中使用EditText。

我看着這里這里這里

但是,Android Studio可以構建(編譯)我的應用程序,但是當我在模擬器中運行該應用程序(在添加此邏輯之前已經運行)時,它甚至拒絕加載Activity,而是說“不幸的是,[App]已停止“。 我認為這與將“ addTextChangedListener”代碼的某些部分保留為空白有關,但是我不知道確切該放在哪里(我從上面鏈接的示例中獲取了它)。

我到底在做什么錯,我該如何解決使代碼正常運行的問題? 也許還有一種我還沒有發現的簡單方法...

謝謝!

這是我的XML活動代碼:

    <EditText
        android:id="@+id/editText_from"
        android:ems="10"
        android:gravity="center"
        android:hint="@string/string_from"
        android:importantForAutofill="no"
        android:inputType="number" />

    <EditText
        android:id="@+id/editText_to"
        android:ems="10"
        android:gravity="center"
        android:hint="@string/string_to"
        android:importantForAutofill="no"
        android:inputType="number" />

這是我的Java代碼:

package com.example.appname;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class NumberActivity extends AppCompatActivity {
    private EditText editTextFrom;
    private EditText editTextTo;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_number);
        editTextFrom = (EditText) findViewById(R.id.editText_from);
        editTextTo = (EditText) findViewById(R.id.editText_to);
        editTextFrom.setText(editTextFrom.getEditableText());
        editTextTo.setText(editTextTo.getEditableText());
        final int fromValue = 0;
        editTextFrom.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // What do I put here?
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // What do I put here?
            }

            @Override
            public void afterTextChanged(Editable s) {
                editTextFrom.setText(fromValue);
            }
        });
        final int toValue = 0;
        editTextTo.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // What do I put here?
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // What do I put here?
            }

            @Override
            public void afterTextChanged(Editable s) {
                editTextFrom.setText(toValue);
            }
        });
        int randomNum = ThreadLocalRandom.current().nextInt(fromValue, toValue);
        return;
    }
}

因此,您需要在一定范圍之間生成一個隨機數。 您有一個按鈕,單擊該按鈕時需要生成該隨機數。 那是什么意思呢? 這意味着您無需添加editText.addTextChangedListener即可連續偵聽文本更改。

步驟1.創建一個名為generateRandomNumber的方法。

private int generateRandomNumberBetweenRange(int from, int to){
    return ThreadLocalRandom.current().nextInt(fromValue, toValue);
}

步驟2:將onClickListener設置為XML中具有的按鈕,然后在此按鈕的onClick中,從EditText獲取值,並將這些值傳遞給在步驟1中創建的函數。

button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
              int fromValue = Integer.parseInt(fromValueEditText.getText().toString());
              int toValue = Integer.parseInt(toValueEditText.getText().toString());
              int randomNumber = generateRandomNumberBetweenRange(fromValue, toValue);
              //Your random Number is generated, you can now do whatever you want with it.
              }
          });

我不知道如果這是你的問題究竟但似乎你有fromValuetoValue都設置為final這意味着它們都設置為0后,他們無法改變這意味着您的int randomNum = ThreadLocalRandom.current().nextInt(fromValue, toValue); 一直嘗試調用nextInt(0,0) ,根據這里的javadocs 它將拋出IllegalArgumentException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM