根据另一个数组确定数组值

时间:2012-10-25 18:21:03

标签: java

我目前正在处理我的一项任务,并且正在为我的一个职能部门的逻辑寻求帮助。

首先我有一个要分类的数字数组,然后是一个数字间隔,这个数字决定了每个被绘制的数字在哪个位置进入array2。

即。

int interval = 2;

for(int i = 0; i < array1.length; i++) {
    if((array1[i] > 0) && (array1[i] < interval)) {
        array2[0]++;
    }
}

但是,array1中的数字是3.我需要另一个if语句,如下所示:

...
}else if((array1[i] > 2) && (array1[i] < interval * 2)) {
    array2[1]++;
}else if((array1[i] > 

你可以开始看到这个问题是我需要继续使用无穷无尽的数字。所以我的问题是实现这一目标的更简单方法是什么?或者我已经可以使用这个库了吗?

如果我没有说清楚,我很抱歉,如果没有给我代码,我也更愿意。如果有人能够告诉我一个更有效的方法来解决这个问题,我将不胜感激,提前感谢!

编辑:

假设间隔设置为2,并且array1中的数字介于0和10之间,我需要创建一个可以执行此操作的代码:

2 < numFromArray1 > 0 == array2[0]++
4 < numFromArray1 > 2 == array2[1]++
6 < numFromArray1 > 4 == array2[2]++
8 < numFromArray1 > 6 == array2[3]++
10 < numFromArray1 > 8 == array2[4]++

但是,array1中的数字可以是正数或负数,整数或小数。

5 个答案:

答案 0 :(得分:7)

使用嵌套循环。显然,间隔的可能性不是很大,因为array2具有固定的大小。因此,如果你循环遍历array2中的所有单元格,然后做一些数学运算来弄清楚你的条件需要...我不会给出完整的代码(你问我不要,但它看起来像是:< / p>

for ( ... ) {
    for ( ... ) { 
        if (array1[i] > /* do some math here */ && ... ) {
            array2[/* figure out what this should be too */]++;
        }
    }
 }

希望你能从中找到答案。

顺便说一句,如果您不需要为array2使用数组,请考虑了解LinkedList<?>数据结构,以便根据需要增加数据结构。

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/LinkedList.html

http://www.dreamincode.net/forums/topic/143089-linked-list-tutorial/

答案 1 :(得分:2)

假设我理解问题是正确的,并且间隔为3,那么出现0,1和2会增加array2 [0],出现3,4和5会增加array2 [1],依此类推将是一个解决方案:

编辑抱歉,您不想看到代码。如果你愿意,我可以重新发布它。想想一个真正简单的方法来确定一个数字将在哪个类别。我会尝试给出一个提示。

间隔= 3;
0,1,2 - &gt; 0类
3,4,5 - &gt;第1类
6,7,8 - &gt;第2类

一旦知道了类别,就可以很容易地在array2中增加所需的数字。

它看起来像那样:

for(int i = 0; i < array1.length; i++) {
    int category = // determine category here
    // increase correct position of array2
}

经过一番讨论,这是我的代码:

for(int i = 0; i < array1.length; i++) {
    int category = array1[i] / interval;
    array2[category]++;
}

我的解决方案不适用于负数。此外,它没有指定如何处理它们

答案 2 :(得分:2)

以下是您可以采取的措施来考虑所有情况: -

  • 首先找出数组中最大值的内容: - array1

  • 您的范围应为0 to maxValueInArray1

  • 然后在你的外部for循环中,你可以拥有另一个,从0(maximum value) / 2。因为,您不想在maximum value * 2

  • 中查看interval
  • 然后对于每个值,您可以检查范围,如果它在该范围内,请使用array2[j]

对于E.G: -

for (...) // Outer loop {
    for (int j = 0; j <= maximumValueinArray1 / 2; j++) {
        // Make a range for each `j`
        // use the `array2[j]` to put value in appropriate range.
    }
}

在内循环中,您可以根据以下推理检查此情况: -

对于interval = 2,并说maximumValueinArray1max,您的范围如下: -

  0 * interval ----- (1 * interval)  --> in `array2[0]` (0 to 2)
  1 * interval ----- (2 * interval)  --> in `array2[1]` (2 to 4)
  2 * interval ----- (3 * interval)  --> in `array2[2]` (4 to 6)

and so on.

 ((max / 2) - 1) * interval ----- (max / 2) * interval  (`max - 2` to max)

所以,尝试将这些条件与我发布的内部循环相关联,您的问题就会得到解决。

答案 3 :(得分:1)

我不确定你究竟要做什么,但是从你的代码片段中,我可以想出这个内部for循环:

//OUTDATED CODE - please see code block in EDIT below
//for(int i = 0; i < array1.length; i++) {
//    for (int j = 0; j < 100000; j++) { //or Integer.MAXVALUE or whatever
//        if ((array1[i] > (j*2)) && (array1[i] < interval * ((j*2)==0?2:(j*2)) )) {
//            array2[j]++;
//        }
//    }
//}

编辑:由于您最近的编辑,这更合适,您不必运行内循环!:

  1. 循环遍历array1
  2. 对于array1中的每个元素,通过取元素/区间
  3. 来查找array2索引
  4. 在找到的索引处为array2元素添加1。
  5. 请勿查看以下代码=)

    for(int i = 0; i < array1.length; i++) {
        int index = Math.floor(array1[i] / interval);
        array2[index]++;
    
        //the rest are actually not necessary as you just need to get the index
        //and the element will be within range, left inclusive (lower <= value < upper)
    
        //int lower_range = Math.floor(array1[i] / interval) * interval;
        //    //or int lower_range = index * interval;
        //int upper_range = Math.ceil(array1[i] / interval) * interval;
    
        //if ((array1[i] > lower_range) && (array1[i] < upper_range)) {
        //    array2[index]++;
        //}
    }
    

答案 4 :(得分:0)

关系和模式很难弄明白。我试图解释你想要的东西:

如下:

if ( array1[i] < interval * (interval - 2) ) {
    array2[interval-2]++;
}