生成一个随机整数列表(从-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;

如果我理解正确你的问题!

  1. 您想生成用户输入次数介于 -1000 到 1000 之间的随机数。

  2. 然后您想在 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);
    }
  1. 我创建了一个方法,可以为您提供一个范围内的随机数(-1000 到 1000)。
  2. 我已经删除了 ArrayList。相反,我创建了一个 StringBuilder,它将在其中存储所有随机数。
  3. 修改第一个循环,它将迭代直到用户输入次数(直到 1000 次),并且在每次迭代中,它获取随机数并将该随机数附加到字符串生成器。
  4. 删除了第二个循环,不需要它。
  5. 之后,只需在 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());

我尝试获取随机数。