在Android/Java中,如何根据特定的开始/结束数字正确地生成一个随机整数?

在Android/Java中,如何根据特定的开始/结束数字正确地生成一个随机整数?,java,android,xml,android-layout,Java,Android,Xml,Android Layout,我正在尝试创建一个Android应用程序,它接收用户输入的“from”数字和“to”数字(一个范围),然后在该范围内生成一个随机整数。我使用了2个editText和编号输入类型,这样用户就可以输入它们的唯一值,然后我尝试在相应的Java文件中使用editText(两个文件都附在下面) 我看了又看 然而,Android Studio可以构建(编译)我的应用程序,但当我在emulator中运行该应用程序时(在我添加此逻辑之前,该程序已经运行),它甚至拒绝加载该活动,而是说“很遗憾,[应用程序]已停止

我正在尝试创建一个Android应用程序,它接收用户输入的“from”数字和“to”数字(一个范围),然后在该范围内生成一个随机整数。我使用了2个editText和
编号
输入类型
,这样用户就可以输入它们的唯一值,然后我尝试在相应的Java文件中使用editText(两个文件都附在下面)

我看了又看

然而,Android Studio可以构建(编译)我的应用程序,但当我在emulator中运行该应用程序时(在我添加此逻辑之前,该程序已经运行),它甚至拒绝加载该活动,而是说“很遗憾,[应用程序]已停止”。我认为这与将“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" />

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

,因此,您需要在特定范围内生成一个随机数。您有一个按钮,单击该按钮时,需要生成该随机数。那是什么意思?这意味着您不需要添加
editText.addTextChangedListener
来持续侦听文本更改

第一步。创建一个名为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.
              }
          });

请阅读“如何创建一个应用程序”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并帮助您。我到底做错了什么。。。我们不能告诉你。因为您没有告诉我们您的代码以何种方式显示意外结果。只是当我从
fromValue
toValue
中删除
final
时,
public void-afterTextChanged(可编辑的s)
中的代码抛出了一个错误(代码是
editTextFrom.setText(fromValue);
对于特定的public void和
toValue
是类似的)。androidstudio说,从内部类中访问
Variable'fromValue',需要声明final
@Riyaad Azad,也许尝试用
private int-to value来使它们成为类变量private EditText EditText to之后的行上的code>尝试了,但没有抛出错误,这很好。但是,当我点击带我进入带有随机数字的活动的按钮时,该应用程序仍然会在模拟器中崩溃(因此它甚至不会加载屏幕,即使是在我添加此代码之前)。不过,谢谢。@Riyad Azad Yeah试试Vedprakash的解决方案,你可能会有更多的错误,而不仅仅是将它们声明为
final
。我只知道这绝对是不对的。谢谢@Vedprakash-这解决了我眼前的问题。但是,如果我想从完全不同的活动访问
int randomNumber
,该怎么办?我现在正在尝试这样做,我得到了那些“无法解决符号”错误。我认为这与它是
public void
(void)…有关。你可以使用Intent在活动之间传递数据。你说的一句话我一点都不懂。看看这个,在Android中通过Intent传递整数。您试图在活动的onCreate之外使用getIntent()方法。将getIntent()代码放在setContentView()下面的onCreate()中
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.
              }
          });