我试图比较哪个在相邻元素相乘时具有更大的商:
public static void main(String args[]) {
int[] inputArray = {-5, 8, -9, 1, -5, 4};
int x = 0;
long maxsofar = 0;
while (x < inputArray.length - 1) {
int currentmax = inputArray[x] * inputArray[x + 1];
maxsofar = (maxsofar > currentmax) ? maxsofar : currentmax;
}
x++;
}
System.out.println(maxsofar);
}
到目前为止我的代码工作正常,但是当我尝试在我的数组上使用负整数时,它只输出0。
答案 0 :(得分:2)
这可能是因为0是&gt;比负数。相乘时所有相邻元素都会产生负数 - >
-5 * 8 = -40
8 * -9 = -72
等
所以0是最大值。
例如,您可以使用Math.abs()来使用绝对值。或者您可以将maxsofar设置为Long.MIN_VALUE以获得最大数字,即使为负数。你完成它的方式得到最大的数字&gt; 0
而且这种方式你的程序正好适用于那个数组(有5个元素)。一个更好的方法是:
for (int i = 0; i < inputArray.length - 2; i++) {
int currentmax = inputArray[i] * inputArray[i + 1];
if (maxsofar < currentmax) {
maxsofar = currentmax;
} //No need to handle the case where you say A=A :)
}
或者甚至更好,你可以做Math.max(maxsofar,currentmax)
;
答案 1 :(得分:0)
尝试使用:
public List<int[,]> Mutation(int[] RouletteWheel, List<int[,]> population)
{
/* Note RouletteWheel is never used*/
double rndNumber1 = 0.0;
int chrom1 = 0;
int rndNumber2 = 0;
Random rnd = new Random();
/* orig code had j< rows-1, but it should be j< rows or j<= rows-1*/
for (int j = 0; j < rows ; j++)
{
/* orig code had v < columns-1, but it should be
v < columns or v <= columns-1 */
for (int v = 0; v < columns; v++)
{
/* Why is this if statement here?
rndNumber 2 is always 0,
you are only evaluating the first row */
if (j == rndNumber2) /* Mutate the cell that is equal to 1 */
{
/* the following code will set all values that are 0 to 1*/
if (population[chrom1][j, v] == 0)
{
population[chrom1][j, v] = 1;
}
}
}
}
return population;
}
作为初始化。然后保证下一个最大值。