Причина, по которой вы будете использовать do в течение некоторого времени, заключается в том, что вы хотите, чтобы код внутри l oop запускался, а затем проверял условие в конце, если условие все еще истинно, то код в разделе do снова выполняется - через некоторое время l oop это происходит наоборот.
Попробуйте:
do{
System.out.println("Welcome to Snakes & Ladders");
System.out.println("1. 2 Player" );
System.out.println("2. 3 Player");
System.out.println("3. Exit");
System.out.print("Choice: ");
menu = scan.nextInt();
}while (menu < 1 || menu >3 );