将相邻元素相乘并比较哪些元素具有更高的值

时间:2018-04-27 14:05:52

标签: java arrays compare multiplication negative-number

我试图比较哪个在相邻元素相乘时具有更大的商:

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。

2 个答案:

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

作为初始化。然后保证下一个最大值。