生成一个随机整数列表(从-1000到1000),列表中整数的数量由用户输入决定
Generating a list of random integers (from -1000 to 1000), the number of integers in the list are determined by user input
我查看了其他问题,但似乎没有任何效果。用户选择列表中有多少个数字,它们应该在 -1000 到 1000 之间。我尝试使用两个 for 循环,一个显示随机数,另一个围绕该循环重复用户输入的次数。现在我试着让循环使用最大 1000 的正整数。当使用系统打印输出时它终于工作了但是使用 GUI 我只得到一个随机数。我使用了 ArrayList
因为我认为它可以让我在每个循环中添加它。
int a;
private void btnSortActionPerformed(java.awt.event.ActionEvent evt) {
try {
a = Integer.parseInt(txtSort.getText());
} catch (NumberFormatException numberFormatException) {
lbl1.setText("Please enter a proper integer");
}
ArrayList<Integer> list = new ArrayList<>();
for (int i=1;i<=1000; i++) {
list.add(i);
}
for (int i=0; i<a; i++) {
txtpane1.setText(String.valueOf(list.get(i)));
}
}
txtSort
是程序获取整数数量的文本字段,我使用的是 Apache NetBeans。
您可以像这样生成数字。
Random r = new Random();
int n = r.nextInt(2001) - 1000;
r.nextInt(2001)
returns 介于 0 and 2000
之间的数字。
- 从中减去
1000
得到一个介于 -1000 和 1000 之间的数字。
所以你可以使用一个循环来生成你想要的任意多个。您还可以使用流来生成数字并创建列表。
- 通过
r.ints
指定要生成的数字和范围
- 映射到整数并像以前一样减去
1000
。
- 收集到列表中。
int count = 10;
List<Integer> numbers = r.ints(count, 0, 2001)
.mapToObj(i -> Integer.valueOf(i - 1000))
.collect(Collectors.toList());
System.out.println(numbers);
打印类似
的内容
[586, 110, 667, 502, 129, -474, 382, -357, -906, -910]
需要进口
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
如果我理解正确你的问题!
您想生成用户输入次数介于 -1000 到 1000 之间的随机数。
然后您想在 Text Pane
(您的 GUI)中显示这些所有数字。
请看下面的代码:(修改了你的代码)
int a;
private void btnSortActionPerformed(java.awt.event.ActionEvent evt) {
try {
a = Integer.parseInt(txtSort.getText());
}
catch (NumberFormatException numberFormatException) {
lbl1.setText("Please enter a proper integer");
}
StringBuilder stringBuilder = new StringBuilder();
for (int i=1;i<=a; i++) {
int randomNumber = getRandomNumber(-1000,1001);
stringBuilder.append(randomNumber).append(" ");
}
txtpane1.setText(stringBuilder.toString());
}
public int getRandomNumber(int min, int max) {
return (int) ((Math.random() * (max - min)) + min);
}
- 我创建了一个方法,可以为您提供一个范围内的随机数(-1000 到 1000)。
- 我已经删除了
ArrayList
。相反,我创建了一个 StringBuilder
,它将在其中存储所有随机数。
- 修改第一个循环,它将迭代直到用户输入次数(直到 1000 次),并且在每次迭代中,它获取随机数并将该随机数附加到字符串生成器。
- 删除了第二个循环,不需要它。
- 之后,只需在 GUI 中设置
StringBuilder
文本。
Random rand = new Random()
final int min = -1000;
final int max = 1000;
// Map (-1000 to 1000) to (0 to 2001)
// because 'Random.nextInt' returns
// positive integers only.
final int positiveIntRangeMax = max - min + 1;
final int offsetFromPositiveIntRange = min;
//loop 'a' times as required by user input
for (int i=1;i<=a; i++) {
int newPositiveRandInt = rand.nextInt(positiveIntRangeMax);
int newRandIntInRange =
newPositiveRandInt + offsetFromPositiveIntRange;
list.add(newRandIntInRange);
}
txtpane1.setText(list.toString());
我尝试获取随机数。
我查看了其他问题,但似乎没有任何效果。用户选择列表中有多少个数字,它们应该在 -1000 到 1000 之间。我尝试使用两个 for 循环,一个显示随机数,另一个围绕该循环重复用户输入的次数。现在我试着让循环使用最大 1000 的正整数。当使用系统打印输出时它终于工作了但是使用 GUI 我只得到一个随机数。我使用了 ArrayList
因为我认为它可以让我在每个循环中添加它。
int a;
private void btnSortActionPerformed(java.awt.event.ActionEvent evt) {
try {
a = Integer.parseInt(txtSort.getText());
} catch (NumberFormatException numberFormatException) {
lbl1.setText("Please enter a proper integer");
}
ArrayList<Integer> list = new ArrayList<>();
for (int i=1;i<=1000; i++) {
list.add(i);
}
for (int i=0; i<a; i++) {
txtpane1.setText(String.valueOf(list.get(i)));
}
}
txtSort
是程序获取整数数量的文本字段,我使用的是 Apache NetBeans。
您可以像这样生成数字。
Random r = new Random();
int n = r.nextInt(2001) - 1000;
r.nextInt(2001)
returns 介于0 and 2000
之间的数字。- 从中减去
1000
得到一个介于 -1000 和 1000 之间的数字。
所以你可以使用一个循环来生成你想要的任意多个。您还可以使用流来生成数字并创建列表。
- 通过
r.ints
指定要生成的数字和范围
- 映射到整数并像以前一样减去
1000
。 - 收集到列表中。
int count = 10;
List<Integer> numbers = r.ints(count, 0, 2001)
.mapToObj(i -> Integer.valueOf(i - 1000))
.collect(Collectors.toList());
System.out.println(numbers);
打印类似
的内容[586, 110, 667, 502, 129, -474, 382, -357, -906, -910]
需要进口
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
如果我理解正确你的问题!
您想生成用户输入次数介于 -1000 到 1000 之间的随机数。
然后您想在
Text Pane
(您的 GUI)中显示这些所有数字。
请看下面的代码:(修改了你的代码)
int a;
private void btnSortActionPerformed(java.awt.event.ActionEvent evt) {
try {
a = Integer.parseInt(txtSort.getText());
}
catch (NumberFormatException numberFormatException) {
lbl1.setText("Please enter a proper integer");
}
StringBuilder stringBuilder = new StringBuilder();
for (int i=1;i<=a; i++) {
int randomNumber = getRandomNumber(-1000,1001);
stringBuilder.append(randomNumber).append(" ");
}
txtpane1.setText(stringBuilder.toString());
}
public int getRandomNumber(int min, int max) {
return (int) ((Math.random() * (max - min)) + min);
}
- 我创建了一个方法,可以为您提供一个范围内的随机数(-1000 到 1000)。
- 我已经删除了
ArrayList
。相反,我创建了一个StringBuilder
,它将在其中存储所有随机数。 - 修改第一个循环,它将迭代直到用户输入次数(直到 1000 次),并且在每次迭代中,它获取随机数并将该随机数附加到字符串生成器。
- 删除了第二个循环,不需要它。
- 之后,只需在 GUI 中设置
StringBuilder
文本。
Random rand = new Random()
final int min = -1000;
final int max = 1000;
// Map (-1000 to 1000) to (0 to 2001)
// because 'Random.nextInt' returns
// positive integers only.
final int positiveIntRangeMax = max - min + 1;
final int offsetFromPositiveIntRange = min;
//loop 'a' times as required by user input
for (int i=1;i<=a; i++) {
int newPositiveRandInt = rand.nextInt(positiveIntRangeMax);
int newRandIntInRange =
newPositiveRandInt + offsetFromPositiveIntRange;
list.add(newRandIntInRange);
}
txtpane1.setText(list.toString());
我尝试获取随机数。