首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android/Java中根据特定的起始/结束数正确生成随机整数?

如何在Android/Java中根据特定的起始/结束数正确生成随机整数?
EN

Stack Overflow用户
提问于 2019-06-04 02:49:25
回答 2查看 309关注 0票数 0

我正在尝试创建一个Android应用程序,它接受用户输入的" from“数字和" to”数字(一个范围),然后从该范围内生成一个随机整数。我将2 EditTexts与number inputType一起使用,这样用户就可以输入他们唯一的值,然后我尝试在相应的Java文件中使用EditTexts (两个文件都附在下面)。

我看了hereherehere

然而,Android Studio可以构建(编译)我的应用程序,但当我在模拟器中运行应用程序时(在我添加此逻辑之前,模拟器一直在运行),它甚至拒绝加载活动,而是显示“不幸的是,应用程序已停止”。我认为这与将"addTextChangedListener“代码的某些部分留空有关,但我不知道具体应该放什么(我是从上面链接的示例中提取的)。

我到底做错了什么,我怎么才能纠正我所做的事情,让代码正常工作?或者也许有一种更简单的方法,我还没有发现...

谢谢!

下面是我的XML活动代码:

代码语言:javascript
复制
    <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代码:

代码语言:javascript
复制
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;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 03:09:18

因此,您需要在某个范围内生成一个随机数。你有一个按钮,当你点击它时,你需要生成随机数。那么这意味着什么呢?这意味着你不需要添加editText.addTextChangedListener来持续监听文本的变化。

步骤1.创建一个名为generateRandomNumber的方法。

代码语言:javascript
复制
private int generateRandomNumberBetweenRange(int from, int to){
    return ThreadLocalRandom.current().nextInt(fromValue, toValue);
}

步骤2:将onClickListener设置为您的XML中的按钮,在此按钮的onClick中,从EditText获取值并将这些值传递给在步骤1中创建的函数。

代码语言:javascript
复制
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.
              }
          });
票数 1
EN

Stack Overflow用户

发布于 2019-06-04 03:00:42

我不确定这是否是您的问题,但似乎您将fromValuetoValue都设置为final,这意味着它们在都设置为0之后无法更改。这意味着您的int randomNum = ThreadLocalRandom.current().nextInt(fromValue, toValue);总是试图调用nextInt(0,0),根据javadoc,here将抛出一个IllegalArgumentException

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56432987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档