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