返回不同类型数组的随机元素的Java方法

时间:2018-10-24 22:24:12

标签: java arrays random

我想在不同的时间将不同类型的参数类型数组传递给一个方法/函数,该方法/函数随机返回一个元素,但是使用Java这样做非常麻烦。

我尝试使用以下代码进行操作:

public int rndInx(Array theArray) {
    theArray = theArray[(int)(Math.random() * theArray.length)];
    return theArray;

}

但是,Eclipse提请注意错误; 长度未解析,并且表达式的类型必须为数组类型。我认为问题的一个原因是returnType,但是我不确定哪种类型会接受一定范围的returnTypes。我知道语法可能也非常错误,因为我只是最近才开始学习Java:(

例如,如果我要传递一个包含整数的数组,则将返回一个随机整数元素-如果我要传递一个包含字符串等的数组,则将从该数组中返回一个随机元素。

谢谢。

3 个答案:

答案 0 :(得分:4)

以下是实现最终目标的步骤。

  1. 对于需要考虑的许多原始类型,为rndInx参数int[]double[]等重载方法long[]
  2. 为引用类型创建通用方法

这是通用方法的提示:

public <T> T rndInx(T[] theArray) {
     return theArray[....]; // return the element at a random index
}

答案 1 :(得分:2)

您可以使用通用方法:

android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer

但这不适用于基本数组。如果必须接受原始数组,则必须使用反射并希望调用方具有正确的类型:

lofl = []
for row in data:
    headers = [e[0] for e in lofl]
    if row[0] in headers:
        lofl[headers.index(row[0])].extend(row[1:])
    else:
        lofl.append(list(row))

或返回lofl并让呼叫者进行转换。

答案 2 :(得分:1)

您想要的是使用泛型,例如像这样:

public <T> T selectOneRandomly(T[] array) {
  return array[(int)(Math.random() * array.length)];
}

这应适用于除intdouble等原语以外的所有内容。 对于那些,您要么必须通过重载提供特殊的方法(例如int selectOneRandomly(int[] array)),要么将原始数组转换为包装类型的数组(例如,将int[]转换为Integer[]),然后再传递已转换的数组添加到您的方法。