我有一个二维数组int arr[][] = new int[47][1];,它保存了从Resultset到arr[i][j] = rs.getInt(2);.Now的值,我想从得到的所有行中减去10,20,30到220,然后取接近10,20到220 .How的行从二维数组中减去这些整数值?
编辑1
我通过sql查询获得以下示例表

通过--我正在检索beam_current.As --您可以从表中看到,有多个rowS,其中beam_current的值接近10、20、30,这是我想要的确切的problem.What,它对应于每个beam_current值,它们最接近10,20,直到220.I不知道如何通过sql查询解析它,所以我是通过编码来实现的。
发布于 2015-01-14 04:46:30
下面是一个解决问题的工作示例。
首先,您必须读取数据库中的所有值并将它们写入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上迭代,它表示引用数字。若要获取给定数字的最近值,请执行以下操作:
这就是你要找的东西吗?
发布于 2015-01-14 04:53:49
对于一维数组,使用最详细的语法:
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
}如果你有其他的想法,请澄清你的要求。
发布于 2015-01-14 05:13:38
请检查下面的代码是否给出了预期的输出
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查询在MYSQL中提出解决方案。
select * from <TableName >where
mod(beam_current,10.0 ) >= 9.97 or mod(beam_current,10.0 )<= 0.03 希望这能解决这个问题
https://stackoverflow.com/questions/27935993
复制相似问题