Me ajuda merge sort

o gente eu to com uma dificuldade tenho que fazer um exercicio o enunciado eh esse
Primeiro tem que fazer uma classe chamada aluno que seria essa aqui q eu fiz

public class Aluno {
    private String nome;
    private int matricula;
    private int nunchamada;
public Aluno(String nome,int matricula, int nunchamada){
    this.nome=nome;
    this.matricula=matricula;
    this.nunchamada=nunchamada;
}
public String getNome(){
    return nome;
}
public void setNome(String nome){
    this.nome=nome;
}
public int getMatricula(){
return matricula;
}
public void setMatricula(int matricula){
this.matricula=matricula;} 
public int getnunchamda(){
return nunchamada;
}
public void setNunChamda(int nunchamada){
this.nunchamada=nunchamada;
}
}

depois
Crie classe que tenha um método que implemente o Merge-Sort,
para ordenar um vetor de Alunos de acordo com seu nome, caso
exista mais de um aluno com o mesmo nome, então deve ordenálos
pela matricula.
a classe merge sort seria essa aqui

public class MergeSort {
public int[] vetor;

/*
 * Método recursivo que divide o vetor em dois e depois os mescla e ordena
 */

public void merge(int inicio, int fim) {

        if (inicio < fim) {
                int meio = (inicio + fim) / 2;
                merge(inicio, meio);
                merge(meio + 1, fim);
                mesclar(inicio, meio, fim);
        }

}

/* 
 * Ordena dois trechos ordenados e adjacente de vetores e ordena-os
 * conjuntamente
 */
public void mesclar(int inicio, int meio, int fim) {

        int tamanho = fim - inicio + 1;

        /*
         * Inicialização de um vetor temporario para auxiliar na ordenação O
         * vetor temporário é uma cópia do trecho que será ordenado
         */

        int[] temp = new int[tamanho];

        for (int posicao = 0; posicao < tamanho; posicao++) {
                temp[posicao] = vetor[inicio + posicao];
        }

        /*
         * Laço para ordenação do vetor, utilizando o vetor temporário, usando
         * índices i e j para cada trecho de vetor da mesclagem
         */

        int i = 0;
        int j = meio - inicio + 1;

        //A depender das condições, recebe um elemento de um trecho ou outro
        for (int posicao = 0; posicao < tamanho; posicao++) {
                vetor[inicio + posicao] = 
                        (j <= tamanho - 1) ? 
                                ((i <= meio - inicio) ? 
                                                (temp[i] < temp[j]) ? 
                                                                temp[i++]
                                                : temp[j++]
                                : temp[j++])
                        : temp[i++];
        }
}
}

acho q esta errado essa classe mergesort
e fiz minha classe main para poder fazer teste

ublic class Main {


    public static void main(String[] args) {
//       Aluno alu = new Aluno();
       Aluno rafael = new Aluno("Rafael",100000,13);
       Aluno sakurai = new Aluno("Saurai",10023,20);
       Aluno cristiano = new Aluno("Cristiano",101010,13);
       Aluno rafael2 = new Aluno("Rafael",100011,10);
      Aluno[] alunos = {rafael,sakurai,cristiano,rafael2};
      MergeSort merg = new MergeSort();
      merg.merge(inicio, fim);//ta dando eero isso
      
      
      
    }

}

depois de ordenado tem q aparecer assim

? Cristiano ? 101010 ? 3
? Rafael ? 100000 ? 13
? Rafael ? 100011 ? 10
? Sakurai ? 100023 ? 20
mais ta dando erro
sera que alguem poderia me ajudar grata