如何将数组作为三个参数传递给Java中的函数? (原谅我,我对Java很新)。
我有以下函数,它以float r, float g, float b, float a
作为参数。
renderer.prepare(r, g, b, 1);
我想传递此函数的输出。(或者弄清楚如何返回三个单独的解压缩浮点数。)
public static float[] rgbToFloat(int r, int g, int b) {
return new float[] {(float) r / 255f, (float) g / 255f, (float) b / 255f};
}
我该怎么做?在其他一些语言中,它看起来像这样:
renderer.prepare(...rgbToFloat(25, 60, 245), 1);
答案 0 :(得分:2)
这是“ X-Y问题”的典型示例。您最初的任务是以某种方式将要传递给函数的3个不同的参数分组。那就是“问题X”。然后,您想到了为此使用数组的想法,但是您仍然不确定如何去做,因此您发布了这个问题,询问如何最好地使用数组来实现所需的功能。但这是“问题Y”,而不是“问题X”。
使用数组可能是也可能不是解决“问题X”的正确方法。 (剧透:不是。)
我遵循最小惊喜的原则,在我看来,解决问题“ X”的最佳方法是声明一个新类FloatRgba
,该类将四个浮点数封装在单个浮点成员中:{{1} }。
因此,那么您的final float r; final float g; final float b; final float a;
方法不必返回不确定的float数组,而是变成了rgbToFloat()
的{{1}}工厂方法:
static
最后,您将引入一个实用函数FloatRgba
,该函数接受public static FloatRgba fromIntRgb( int r, int g, int b )
{
return new FloatRgba( r / 255f, g / 255f, b / 255f, 1.0f );
}
和prepareRenderer
并调用Renderer
并将其传递给FloatRgba
的各个成员。 / p>
通过这种方式,您可以使所有内容保持清晰,自我记录并具有强类型性。是的,它有点冗长,但这对您来说是java。
答案 1 :(得分:0)
对于最初的问题也许已经晚了,但是可能会帮助后来的读者在这里绊倒(像我一样),但是:我宁愿建议仅将一个参数转换为float:
f(myfunc, mylist)
现在拨打电话
public static float rgbToFloat(int value)
{
return value / 255.0f;
// don't need the cast, value will be promoted to float anyway
// as second parameter is already
}
当然,缺点是您现在必须调用它三次(相反,您将不得不将数组存储在注释中所示的临时位置中,相比之下,您不必两者都有很大的收获),最后,您可以获得灵活性,并且在不需要临时数组对象时避免使用它。
如果您仍然坚持使用阵列,则需要一个临时的
renderer.prepare(rgbToFloat(25), rgbToFloat(60), rgbToFloat(245), 1);
但是我不知道为什么您也不考虑alpha:
float[] rgb = rgbToFloat(r, g, b);
renderer.prepare(rgb[0], rgb[1], rgb[2], 1.0f);