如何从java中的二维数组中减去一个整数值

时间:2015-01-14 04:40:52

标签: java arrays subtraction

我有一个二维数组int arr[][] = new int[47][1];它将Resultset中的值保存为arr[i][j] = rs.getInt(2);。现在我想从我得到的所有行中减去10,20,30到220,然后取行接近值10,20到220.如何从二维数组中减去这些整数值?

编辑1

我通过sql查询得到以下示例表 enter image description here

通过Resultset我正在检索beam_current。你可以从表中看到有多个rowS,其中beam_current的值接近10,20,30,这是我的确切问题。我想要的是一个单行对应每个beam_current值最接近10,20到220 。我不知道如何通过sql查询解决它,因此我是通过编码来完成的。

3 个答案:

答案 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 

希望这能解决问题