我目前正在处理我的一项任务,并且正在为我的一个职能部门的逻辑寻求帮助。
首先我有一个要分类的数字数组,然后是一个数字间隔,这个数字决定了每个被绘制的数字在哪个位置进入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中的数字可以是正数或负数,整数或小数。
答案 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
,并说maximumValueinArray1
为max
,您的范围如下: -
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]++;
// }
// }
//}
编辑:由于您最近的编辑,这更合适,您不必运行内循环!:
请勿查看以下代码=)
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]++;
}