【问题标题】:generating 50 random float arraylist value unique生成 50 个随机浮点数组列表值唯一
【发布时间】:2017-05-01 04:08:32
【问题描述】:

我正在尝试编写将 50 个随机生成的浮点数存储在 ArrayList 中的代码。使用常规的 for 循环遍历这些值并删除任何小于 0.5 的值。然后使用 for-each 循环打印出剩余的值。

这是我目前的代码,我不知道从哪里开始......

import java.util.ArrayList;

public class fiftyFloats {

    public static void main (String [] args) { 

        //create a reference for the array list 
        ArrayList <Float> vals; 

        //reserve space for it in memeory 
        vals = new ArrayList <Float> (50);

        for (int i = 0; i<vals.size(); i++){
            i = new Float
        }

        for (Integer atPos: vals) { 
            System.out.println(vals.toString()); 
        }
    }
}

【问题讨论】:

  • 但没有随机生成的数字,只是一些无法编译的循环。

标签: java arrays arraylist random


【解决方案1】:

由于您需要的浮点值未在 min 和 max 之间引用,因此您可以使用 nano time

例子:

List <Float> vals = new ArrayList <Float> (50);

for (int i = 0; i<vals.size(); i++){
    vals.add (System.current/100.0f);
}**

【讨论】:

    【解决方案2】:

    我认为这就是您在这里尝试做的事情:

        //create a reference for the array list 
        ArrayList<Float> vals;
    
        //reserve space for it in memeory 
        vals = new ArrayList<Float>(50);
    
        Random rand = new Random();
    
        for (int i = 0; i < 50; i++) {
            vals.add(rand.nextFloat());
        }
    
        for (Float val : vals) {
            System.out.println(val.toString());
        }
    

    在您的原始代码中需要指出的一些事项:

        Float fl = new Float(2.2);
    
        //create a reference for the array list 
        ArrayList<Float> vals;
    
        // Here, you've set the _Capacity_, not the size.
        vals = new ArrayList<Float>(50); // vals.size() => 0
    
        // Based on above, you are essentially saying "never do these things"
        // -> for (int i = 0; i < 0; i++)
        for (int i = 0; i < vals.size(); i++) {
    
            // this, if a valid expression, would have an incompatible type
            // since i is of type int.
    
            // if you were to use this, you would need to use a constructor such as
            // new Float(1.2).
    
            i = new Float
    
        }
    
        // In this enhanced loop, you are assigning a value from ArrayList vals
        // to atPos, not the position. Since ArrayList is of type Float,
        // atPos is a Float.
        for (Integer atPos : vals) {
            System.out.println(vals.toString());
    
        }
    

    【讨论】:

      【解决方案3】:
      1. 要生成随机数,您需要使用 Random 类。

      注意 - random.nextFloat() 只会生成一个介于 0.0 和 1 之间的数字,如果您想包含更大的数字,则需要将其相乘

      1. 不能将用于控制 for 循环的整数重新分配给循环内的浮点数

      2. 您不需要将 arrayList.toString() 放入循环中

        import java.util.ArrayList;
        import java.util.Random;
        
        public class fiftyFloats {
        
        public static void main(String[] args) {
        
        ArrayList<Float> vals = new ArrayList<Float>();
        
        Float randomNum;
        Random rand = new Random();
        for (int i = 0; i < 50; i++) {
            randomNum = rand.nextFloat();
            if (randomNum > 0.5) {
                vals.add(randomNum);
            }
        }
        
        System.out.println(vals.toString());
        
        }}
        

      【讨论】:

        【解决方案4】:

        有几种方法可以做到这一点,具体取决于您要如何生成“随机”数字。

        java.util.Random 有一些可以使用的函数,包括“nextFloat”,它返回一个介于 0 和 1 之间的浮点类型的随机值。

        所以

        ArrayList <Float> vals = new ArrayList<>();
        Random rand = new Random();
        for (int i = 0; i < 50; i++) {
             vals.add(rand.nextFloat());
        }
        

        然后应该很容易再次遍历列表并删除任何不符合您标准的数字。您不需要在 ArrayList 中预先保留 50 个位置,这是使用它的好处之一,您可以动态地添加它。

        您的循环无法正常工作。您已经在循环代码中将“i”定义为整数,现在您正尝试创建一个具有相同名称的浮点数。您可以在循环中使用“i”,但它将是您在“int i = 0;”中指定的“i”

        总体而言,您似乎是个新手,不了解有关 java 的一些核心内容,例如变量的工作原理。咨询导师/老师/基础课本可能会对您有很大帮助。

        【讨论】:

        • 我是 java 新手,非常感谢您的详尽回答
        猜你喜欢
        • 2018-01-05
        • 2013-04-22
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        相关资源
        最近更新 更多