我有一个二维数组int arr[][] = new int[47][1];
它将Resultset中的值保存为arr[i][j] = rs.getInt(2);
。现在我想从我得到的所有行中减去10,20,30到220,然后取行接近值10,20到220.如何从二维数组中减去这些整数值?
编辑1
我通过sql查询得到以下示例表
通过Resultset我正在检索beam_current。你可以从表中看到有多个rowS,其中beam_current的值接近10,20,30,这是我的确切问题。我想要的是一个单行对应每个beam_current值最接近10,20到220 。我不知道如何通过sql查询解决它,因此我是通过编码来完成的。
答案 0 :(得分:1)
这是一个解决问题的工作示例
您首先必须读取数据库中的所有值并将它们写入float[]
(因为您的值是浮点数)。
然后,使用您的值调用此方法。
public static Map<Integer, Float> getClosestValues(float[] databaseValues) {
// We will store the results in this map
Map<Integer, Float> results = new LinkedHashMap<>();
// For each number in 10, 20, 30...210, we are going to look for the closest number
for (int number = 10; number <= 210; number += 10) {
float closest = getClosest(databaseValues, number)
// We have our closest value. Let's store it in the map.
results.put(number, closest);
}
// It's done!
float closestTo10 = results.get(10);
float closestTo20 = results.get(20);
float closestTo30 = results.get(30);
// ...
float closestTo210 = results.get(210);
return results;
}
private static float getClosest(float[] databaseValues, int number) {
float closest = databaseValues[0]; // Init the max with the first value
float closestDistance = Math.abs(number - closest);
for (float currentValue : databaseValues) {
float currentDistance = Math.abs(number - currentValue);
if (closestDistance > currentDistance) {
// We have a shortest distance! Let's update the max
closest = currentValue;
closestDistance = currentDistance;
}
}
return closest;
}
这绝对是没有优化也没有精心设计,但我详细介绍了每一步,以便您了解该过程。
number
代表您参考号码。获取给定数字的最接近值:
这是你在找什么?
答案 1 :(得分:1)
对于一维数组,使用最详细的语法:
int arr[] = new int[47];
int number = 10;
int i = 0;
while (i < arr.length && number <= 220) {
arr[i] = arr[i] - number;
number = number + 10;
i = i + 1
}
如果您有其他想法,请澄清您的要求。
答案 2 :(得分:1)
请检查以下代码是否为您提供预期的输出
public static void calculate(){
int arr[] = new int[47];
int number = 10;
int sum =0;
int i=1;
while(number <=220){
sum = sum+number;
number += 10*i;
}
i=-1;
while (++i < arr.length ) {
arr[i] = arr[i] - sum;
}
}
我的理解是你必须从每行值减去10然后20到30 ......直到220。
如果那不符合要求,那么正如我在评论中提出的那样,请提供具有预期输出的样本数据
MYSQL中的替代解决方案
或者根据我的评论和SRV_JAVA的回复。我将借助SQL Query
在MYSQL中提出解决方案select * from <TableName >where
mod(beam_current,10.0 ) >= 9.97 or mod(beam_current,10.0 )<= 0.03
希望这能解决问题