Я использую sort() для сортировки массива в алфавитном порядке, но он делает это от AZ до az. Я пытаюсь загладить каждое слово заранее, но оно не работает, если оно не распечатывается, что должно происходить после сортировки. На данный момент, с этим кодом, он будет перечислять зрачки заглавными буквами, но если бы он был введен как строчный, он будет отсортирован как строчный. Помещение capize() в начальный цикл for, сразу после назначения ввода массиву, не работает. Любые решения?
import java.util.Scanner;
import java.util.Arrays;
public class Pupils {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean loop = true;
int names = 0;
String[] ay = new String[1000];
for(int i = 0; loop == true; i++) {
System.out.println("Enter name: ");
ay[i] = scan.nextLine();
names++;
if (ay[i].equals("0")) {
loop = false;
ay[i] = " ";
}
}
String[] aay = new String[names - 1];
for(int i = 0; i < aay.length; i++) {
aay[i] = ay[i];
}
if (names == 1) {
System.out.print("There are no people in our class.");
} else if (names == 2) {
System.out.print("The person in our class is ");
} else {
System.out.print("The people in our class are ");
}
Arrays.sort(aay);
for(int i = 0; i < names - 1; i++) {
if(i == names - 2) {
System.out.print(capitalize(aay[i]) + ".");
} else if (i == names - 3) {
System.out.print(capitalize(aay[i]) + " and ");
} else {
System.out.print(capitalize(aay[i]) + ", ");
}
}
}
public static String capitalize(String line)
{
return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}
}
Как насчет использования Arrays.sort()
с помощью компаратора? Обратите внимание, что в String
имеется подходящий компаратор, поэтому:
Arrays.sort(aay, String.CASE_INSENSITIVE_ORDER);
должен выполнять эту работу.
String.CASE_INSENSITIVE_ORDER
Я предлагаю хранить все данные в массиве в нижнем регистре. Это упростит сортировку, а также поиск (если вы ищете студента в массиве, и он был введен как, скажем, "Уолтер", и вы ищете "walter", вы его не найдете. Если вы используете строчные буквы для хранения и поиска, он будет работать).
И так как вы в любом случае используете имена для печати, имена будут по-прежнему отображаться заглавными.
Поэтому вместо того, чтобы делать
ay[i] = scan.nextLine();
Ты можешь сделать:
ay[i] = scan.nextLine().toLowerCase();