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

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?

-
In Version 1 you can remove the line  maxI = i + 1;  in the first if-block, because it does not do anything. – MrSmith42 Jan 26 '13 at 21:14

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.

-