HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavaMinor

Code to find the proper index comparing 3 values for max one

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
properthecomparingvaluesonemaxforfindcodeindex

Problem

I have an algorithm and the idea is to move over an array choosing as index the index of the neighboring cell that has the max value.

I.e.

if array[i + 1][j + 1] has the largest value among the 3 then move there.



I have 2 versions of this, but I think it can be cleaner.

version 1:

int maxI = i + 1;  
int maxJ = j + 1;  
if(array[i + 1][j] > array[maxI][maxJ]){   
    maxI = i + 1;  
    maxJ = j;  
}  
if(array[i][j + 1] > array[maxI][maxJ]){  
    maxI = i;  
    maxJ = j + 1;  
}
i = maxI;  
j = maxJ;


version 2:

if(LCS[i + 1][j + 1] > LCS[i][j + 1] && LCS[i + 1][j + 1] > LCS[i + 1][j]){   
    i++;  
    j++;  
}  
else{  
    if(LCS[i][j + 1] > LCS[i + 1][j]){  
        j++;  
    }  
    else{i++;}  
}


Both versions occur in a while loop which I omitted for clarity.

How can these versions become better?

Solution

I think it's easier to follow the second version. I've extracted out some helper variables:

final int b = array[i][j + 1];
    final int c = array[i + 1][j];
    final int d = array[i + 1][j + 1];

    if (d > b && d > c) {
        i = i + 1;
        j = j + 1;
    } else if (b > c) {
        j = j + 1;
    } else {
        i = i + 1;
    }


It seems a little bit readable for me but to be honest I'm not completely satisfied with the result.

Code Snippets

final int b = array[i][j + 1];
    final int c = array[i + 1][j];
    final int d = array[i + 1][j + 1];

    if (d > b && d > c) {
        i = i + 1;
        j = j + 1;
    } else if (b > c) {
        j = j + 1;
    } else {
        i = i + 1;
    }

Context

StackExchange Code Review Q#20929, answer score: 2

Revisions (0)

No revisions yet.