gpt4 book ai didi

java - Java 中类变量的迭代和计数

转载 作者:行者123 更新时间:2023-12-01 14:49:07 25 4
gpt4 key购买 nike

我有一个类,其中包含多种类型的变量,其中大多数(大约 30 个)是 double 型:

String something;
double x;
double y;
double z;
...

我想迭代 double ,但也让它们以这种“经典方式”编写,而不是在数组中,因为派生类使用其中的大部分。我现在遇到问题的函数是如何迭代所有 double 类型变量,找到其中有多少个非零,然后随机选择所有这些变量之一。该类将有数千个实例,正如我所说,有些类扩展了该类。所以我正在研究解决方案,最好是类似伪的:

nonzeros = 0
foreach doubleVarInClass variable
{
if (variable != 0)
nonzeros++;
}
if (nonzeros < parameter)
{
randomDoubleVarInClass = random.next(...);
}

我正在考虑的一个解决方案是使用 HashMap 来保留所有变量,但是随后我将不得不重写所有使用该变量的类,并且不确定它将如何影响性能,因为它将被大量使用每时每刻。我是否应该担心性能并尝试使用经典数组?如果没有的话,我至少想保留变量名。我想到了引用这些变量的数组,所以我可以以这种方式编写它们,不确定它是否可能由于 Java 中的值传递而可能。

也许还有一些结构可以保存有关其中有多少非零或具有有效功能的信息?

感谢您提供任何可以解决我的问题的信息:)

最佳答案

我建议为此使用反射。假设您有名为 o 的类实例:

int nonzeros = 0;
for (Field f : o.getClass().getDeclaredFields()) {
f.setAccessible(true);
if (f.getType().equals(Double.TYPE) && f.getDouble(o) != 0.0) {
nonzeros++;
}
}

注意:从性能的角度来看,Java 反射可能不是一个好主意,从这个角度来看,您应该首先对此进行测试。除此之外,这提供了简单的检查,无需对类定义进行任何更改。在 Java 6 中,反射性能比旧版本好一点,您应该在您的个人用例和环境中检查这一点。

关于java - Java 中类变量的迭代和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com