Это исключение означает, что ваш сканер не нашел ничего для возврата из своего источника. Строки в Java не похожи на строки C, в которых есть хотя бы один символ ('\ 0'). Вы можете защитить программу от сбоя следующим дополнением:
try
{
String ch = sc.nextLine();
ch = ch.toLowerCase();
char c = ch.charAt(0);
if (Character.isLetter(c))
{
return c;
}
return '\0';
}
catch(StringIndexOutOfBoundsException ex)
{
System.out.println("You have entered an empty string");
}
}