When you reach this point the value of i should be the same as index, so the next element to copy is at index (or i) + 1 rather than 2
for(int k = index + 1; k < tempArr.length; k++)
{
tempArr[k] = arr[k - 1];
}
I am not sure why you need the following code, since temparray is (or should be) already complete.
int [] finalArr = new int[tempArr.length + 1];
for(int i = 0; i < tempArr.length; i++)
{
finalArr[i] = tempArr[i];
}
finalArr[finalArr.length - 1] = arr[arr.length - 1];
[edit]
The following code worked for my test:
for (int i = 0; i < index; ++i) {
finalArr[i] = arr[i];
}
finalArr[index] = element;
for (int i = index + 1; i < finalArr.length; ++i) {
finalArr[i] = arr[i - 1];
}
[/edit]