public class MiddleGetter {
public static int getMiddle(int[] sortA, int[] sortB) {
if (sortA == null && sortB == null) {
throw new NullPointerException();
} else if (sortA == null || sortB == null) {
return (sortA == null) ? sortA[sortA.length / 2] : sortB[sortB.length / 2];
}
int middleInA = sortA.length / 2;
int middleInB = sortB.length / 2;
int lengthA = sortA.length;
int lengthB = sortB.length;
if (sortA[middleInA] == sortB[middleInB]) {
return sortA[middleInA];
} else {
int maxMiddle = sortA[middleInA] > sortB[middleInB] ? 0 : 1;
int lastMove = maxMiddle;
if (maxMiddle == 0) {
--middleInA;
} else {
--middleInB;
}
do {
if (lastMove == maxMiddle) {
if (lastMove == 0) {
if (middleInA == -1) {
return sortB[middleInB];
}
if (sortA[middleInA] <= sortB[middleInB]) {
return sortB[middleInB];
} else {
middleInB++;
lastMove = 1;
continue;
}
}
if (lastMove == 1) {
if (middleInB == -1) {
return sortA[middleInA];
}
if (sortB[middleInB] <= sortA[middleInA]) {
return sortA[middleInA];
} else {
middleInA++;
lastMove = 0;
continue;
}
}
} else {
if (lastMove == 0) {
if (middleInA == lengthA) {
return sortB[middleInB];
}
if (sortA[middleInA] >= sortB[middleInB]) {
return sortB[middleInB];
} else {
middleInB--;
lastMove = 1;
continue;
}
}
if (lastMove == 1) {
if (middleInB == lengthB) {
return sortA[middleInA];
}
if (sortB[middleInB] >= sortA[middleInA]) {
return sortA[middleInA];
} else {
middleInA--;
lastMove = 0;
continue;
}
}
}
} while (true);
}
}
public static void main(String[] args) {
int[] A = { 9 };
int[] B = { 0, 1 };
System.out.println(getMiddle(A, B));
}
}