Для моего назначения AP CSA я должен взять имя и затем идентификатор, оба из которых являются строками. Затем они хотят, чтобы я отсортировал значения, используя CompareTo (). Проблема в том, что когда я пытаюсь использовать compareTo (), он всегда выдает исключение нулевого указателя. Первое значение всегда равно null (найдено с помощью System.out.println (), чтобы увидеть, какие значения сравниваются), но я не могу выяснить, почему оно равно null.
Вот мой основной класс:
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
ArrayList<TeamMember> members = new ArrayList<TeamMember>();
String name = "";
while(true)
{
System.out.println("Enter the next name:");
name = scan.nextLine();
if(name.toUpperCase().equals("STOP"))
{
break;
}
System.out.println("Enter the next ID:");
String id = scan.nextLine();
members.add(new TeamMember(name,id));
}
for(int i = 0; i < members.size() - 1; i++)
{
System.out.println(members);
TeamMember temp = members.get(i);
for(int j = i + 1; j < members.size(); j++)
{
System.out.println(members.get(i) + " " + members.get(j));
if(members.get(i).compareTo(members.get(j)) < 0)
{
members.add(i, members.remove(j));
members.set(j, temp);
}
}
}
}
}
и вот мой класс TeamMember:
public class TeamMember implements Comparable<TeamMember>{
String fullName;
String idString;
public TeamMember(String name, String id){
name = name.toUpperCase();
boolean findspace = false;
for(int i = 0; i < name.length(); i++)
{
if (name.charAt(i) == ' ')
{
findspace = true;
break;
}
}
if(findspace)
{
String string1 = name.substring(0, 1) + name.substring(1, findSpace(name)).toLowerCase();
String string2 = name.substring(findSpace(name) + 1, findSpace(name) + 2) + name.substring(findSpace(name) + 2).toLowerCase();
fullName = string1+ " " + string2;
idString = id;
}
else
{
fullName = name.charAt(0) + name.substring(1).toLowerCase();
}
}
private int findSpace(String name){
for(int j = 0; j < name.length(); j++){
if (name.charAt(j) == ' '){
return j;
}
}
return 0;
}
public String toString(){
return fullName;
}
@Override
public int compareTo(TeamMember other){
return this.idString.compareTo(other.idString);
}
}
Я знаю, что моя сортировка, вероятно, неверна, но я не смог проверить это, потому что CompareTo () сбивает меня с толку.
Вот тесты, которые они хотели, чтобы мы опробовали:
Enter the next name:
zeb
Enter the next ID:
02-003
Enter the next name:
rita stevens
Enter the next ID:
01-001
Enter the next name:
SUE wOOds
Enter the next ID:
02-001
Enter the next name:
adele
Enter the next ID:
01-002
Enter the next name:
BarBara
Enter the next ID:
02-002
Enter the next name:
STOP