【问题标题】:Generating a list of random integers (from -1000 to 1000), the number of integers in the list are determined by user input生成一个随机整数列表(从-1000到1000),列表中的整数个数由用户输入决定
【发布时间】:2021-09-04 03:45:34
【问题描述】:

我查看了其他问题,但似乎没有任何效果。用户选择列表中有多少个数字,它们应该在 -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。

【问题讨论】:

    标签: java loops arraylist random integer


    【解决方案1】:

    你可以像这样生成数字。

    Random r = new Random();
    int n = r.nextInt(2001) - 1000;
    
    • r.nextInt(2001) 返回一个介于 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;
    

    【讨论】:

      【解决方案2】:
      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());
      

      我尝试获取随机数。

      【讨论】:

        【解决方案3】:

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

        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 文本即可。

        【讨论】:

          猜你喜欢
          • 2023-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多