我有一个数组,用于保存结果集中的值。我检索数组的代码的概要是:
public String[][] ref_Details() {
int i = 0;
String a[][] = new String[47][11];
try
{
con = getConnection();
stmt = con.createStatement();
String sql=" select b.LOGTIME, b.beam_current, b.beam_energy ..."; // shortened
stmt.executeQuery(sql);
rs = stmt.getResultSet();
while(rs.next()) {
for(int j=0; j<11; j++)
a[i][j] = rs.getString(j+1);
i++;
}
}
catch( Exception e ) { ... }
finally {
closeConnection(stmt, rs, con);
}
return a;
}
获得的样本表是:
在此处输入图片说明
从表中可以明显看出,第二列的beam_current值接近0到220:(0,10,20 … 220)的每个十的整数倍。我想过滤我的数据集,以便对于10的倍数,只选择最接近该倍数的行。为此,我:
从的所有行中减去10,beam_current
然后找到获得的差值:差最小的行是我感兴趣的唯一行,即10的倍数。T
重复步骤1,直到从所有行中总共减去220。
我的预期结果是22行,而不是样本数据中的原始47行。例如,上面样本数据图片中编号为21的行将对应于该值的选定行130。
我的问题是我没有看到预期的结果。我试过的代码是:
public int[] ref_BeamCurrent() {
int i = 0;
int[] arr = new int[47];
try
{
con = getConnection();
...
rs = stmt.getResultSet();
while(rs.next())
{
for(i=0; i<arr.length; i++)
{
arr[i] = rs.getInt(2);
System.out.println(arr);
while (i < arr.length && number <= 210)
{
arr[i] = arr[i] - number;
System.out.println(arr);
number = number + 10;
System.out.println(number);
i = i + 1;
// System.out.println(arr);
}
}
}
}
catch( Exception e ) { ... }
finally { ... }
return arr;
}
这段代码似乎在选择完全错误的行-我在做什么错?
我认为您应该以不同的方式来考虑。您想要做的是找到每行十的倍数的距离。
十进制的最接近倍数由表达式给出 double mult = 10d * Math.round(v / 10d)
与十的倍数的距离由表达式给出 double delta = Math.abs(v - mult)
对于的任何值mult,您要的行都是最小的行delta。
因此,您只需要迭代行一次。
beam_value
连续获取并找到mult
和delta
。delta
的mult
,然后再登录该行为mult,否则忽略它。通过示例(由于我没有您的SQL查询,所以我伪造了数据)。输入数据:
`0.5, 12.10, 13.00, 16.01, 21.52`
给出下面的输出,它是正确的(索引110比索引2更近,索引420比索引3更近):
10x row value
0 0 0.5000
10 1 12.1000
20 4 21.5200
与代码:
public static void findClosestRowsToMultiplesOfTen() {
// fake row values
double[] vals = new double[]{ 0.5, 12.10, 13.00, 16.01, 21.52 };
// get the max value, and its multiple of ten to get the number of buckets
double max = Double.MIN_VALUE;
for (double v : vals) max = Math.max(max, v);
int bucketCount = 1 + (int)(max/10);
// initialise the buckets array to store the closest values
double[][] buckets = new double[bucketCount][3];
for (int i = 0; i < bucketCount; i++){
// store the current smallest delta in the first element
buckets[i][0] = Double.MAX_VALUE;
// store the current "closest" index in the second element
buckets[i][1] = -1d;
// store the current "closest" value in the third element
buckets[i][2] = Double.MAX_VALUE;
}
// iterate the rows
for (int i = 0; i < vals.length; i++)
{
// get the value from the row
double v = vals[i];
// get the closest multiple of ten to v
double mult = getMultipleOfTen(v);
// get the absolute distance of v from the multiple of ten
double delta = Math.abs(mult - v);
// get the bucket index based on the value of `mult`
int bIdx = (int)(mult / 10d);
// test the last known "smallest delta" for this bucket
if (buckets[bIdx][0] > delta)
{
// this is closer than the last known "smallest delta"
buckets[bIdx][0] = delta;
buckets[bIdx][1] = i;
buckets[bIdx][2] = v;
}
}
// print out the result
System.out.format(" 10x row value%n");
for (int i = 0; i < buckets.length; i++)
{
double[] bucket = buckets[i];
int multipleOfTen = i * 10;
double rowIndex = bucket[1];
double rowValue = bucket[2];
System.out.format(" %,2d %,4.0f %.4f%n",
multipleOfTen, rowIndex, rowValue);
}
}
public static double getMultipleOfTen(double v)
{
return 10d * Math.round(v / 10d);
}
问题内容: 我有一种方法,通过该方法,我可以按10的倍数过滤行,即可以按升序过滤最接近十进制数(例如10、20、30等)的行。现在我想按降序进行相同的处理。 请根据以下 异将以下链接过滤器数组 引用为 每十行的倍数之一?** 在上面提到的链接中,相同的过程是以升序完成的,我想以降序执行此操作并将值存储在map中。但是我做不到。 我正在使用以下代码来检索beam_current为十的整数倍的行, 现
假设使用JSON.parse我在一个数组中一起得到了4个可能的答案(像选择题测验)。那个数组的每个值都有一个“特征”(我不知道还能怎么称呼它)。我想通过数组的每个值寻找特定的特征,并过滤掉那些不符合条件的值。 示例数组: 数组的第一个值(1)是正确答案,因为它的“特征”通过说它是“真”来指示它。我想让控制台打印出正确的数值。 示例:正确答案为:1 谢谢你的任何帮助
我的大脑正在融化。。。我正在努力实现以下目标: 我知道有多少个数组,每个数组有多少个元素。这些数字是动态的,但假设有:3个数组,每个数组中有18个元素。 例子: 现在我想得到所有三个数组的元素1的平均值,以及所有三个数组的元素2的平均值,以此类推。 最终结果应该是所有18个元素的平均值的一个数组。 比如: 如果3是固定的,这将起作用,但数组的数量是动态的。 希望这有意义...
问题内容: 我在javascript中有一组对象。内容看起来像这样; 我想保留一些对象并删除其余的对象。如果object属性为2或34,则将保留对象。其他对象被删除。遗嘱的结果看起来像这样; 我正在使用node.js v6.91。 编辑:有人建议我使用过滤器来解决这种问题。欢迎使用过滤器技术的答案。 问题答案: 您可以尝试以下方法1和2: 方法1 :(使用) 注意:这将返回一个新数组,并且不会修改
我需要按行比较两个不同大小的数据帧,并打印出不匹配的行。让我们看以下两个例子: 在df2上按行打印并打印出不在df1中的行的最有效方法是什么。 重要提示:我不希望有行: 包括在差异中: 我已经尝试过了:逐行比较两个不同长度的数据帧,为每行添加相等值的列,比较两个数据帧,并排输出它们的差异 但是这些和我的问题不匹配。
一旦我将类别从数组更改为映射,我想我可以使用多个where条件来过滤文档 现在问题2,firebase要求为复合查询添加索引。我在每个文档中保存的类别是动态的,我无法提前添加这些索引。在这种情况下,理想的解决方案是什么?如有任何帮助,不胜感激。