2015-12-26 2 views
-2

Это не домашнее задание. Это упражнение, которое я натолкнулся на книгу. Создайте класс с именем Name, который представляет имя человека. Класс должен иметь поля, которые представляют собой имя, фамилию и имя отцов. Класс должен иметь следующие методы:Сортировка строки Java

public Name (String fn,String f_n,String ln) 
    /* initializes the fields of an object with the values fn,f_n and m. 
     fn means first name 
     ln means last name 
     f_n means fathersname btw. */ 

public String getNormalOrder(); //returns the name of the person in the normal order : first name,fathers name,last name. 

public String getReverseOrder(); //returns the name of the person in the reverse order : last name,fathers name,first name. 

public boolean compare (String fn,String f_n,String ln); // Returns true if the first name is the same with fn,fathers name is the same with f_n, last name with ln.If the opposite happens it returns false. 

Построить программу под названием АСМАП, который проверяет методы класса Firstname.

Мое решение

public class Name { 
    String fn; 
    String f_n; 
    String ln; 

    public Name(String initialfn, String initialf_n, String initialln) { 
     fn = initialfn; 
     f_n = initialf_n; 
     ln = initialln; 
    } 

    public String getNormalOrder() { 
     return fn + " " + f_n + 
      " " + ln; 
    } 

    public String getReverseOrder() { 
     return ln + ", " + f_n + 
      " " + fn + " "; 
    } 
} 

Как насчет третьего метода, который в сравнении? Также как я могу проверить класс?

ответ

1

Для гибкого решения:

public enum NameMember { 
    FIRSTNAME, SECONDNAME, FATHERSNAME; 
} 

Name Класс:

public class Name { 
    private final String firstName; 
    private final String secondName; 
    private final String fathersName; 

    public Name(String firstName, String secondName, String fathersName) { 
     this.firstName = firstName; 
     this.secondName = secondName; 
     this.fathersName = fathersName; 
    } 

    public String getName(NameMember member1, NameMember member2, NameMember member3) { 
     StringBuilder sb = new StringBuilder(); 
     return sb.append(getMember(member1)).append(" ") 
       .append(getMember(member2)).append(" ") 
       .append(getMember(member3)).toString(); 
    } 

    public String getMember(NameMember member) { 
     switch (member) { 
      case FIRSTNAME: 
       return firstName; 
      case SECONDNAME: 
       return secondName; 
      case FATHERSNAME: 
       return fathersName; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public String toString() { 
     return getName(NameMember.FIRSTNAME, NameMember.SECONDNAME, NameMember.FATHERSNAME); 
    } 
} 

NameComparator (гибкий) Класс:

import java.util.Comparator; 

public class NameComparator implements Comparator<Name> { 

    private NameMember nameMember; 

    public NameComparator(NameMember nameMember) { 
     this.nameMember = nameMember; 
    } 

    @Override 
    public int compare(Name name1, Name name2) { 
     return name1.getMember(nameMember).compareTo(name2.getMember(nameMember)); 
    } 
} 

И основной класс (тест-драйв):

public static void main(String args[]) { 
    List<Name> names = new ArrayList<>(); 
    names.add(new Name("Alice", "Burda", "Christophe")); 
    names.add(new Name("Ben", "Ashton", "Caine")); 
    names.add(new Name("Chane", "Bagwell", "Alex")); 
    names.add(new Name("Ann", "Clinton", "Brad")); 

    System.out.println("NAMES ORDERED BY FIRST NAME:"); 
    Collections.sort(names, new NameComparator(NameMember.FIRSTNAME)); 
    printNames(names); 

    System.out.println("\nNAMES ORDERED BY SECOND NAME:"); 
    Collections.sort(names, new NameComparator(NameMember.SECONDNAME)); 
    printNames(names); 

    System.out.println("\nNAMES ORDERED BY FATHERSNAME:"); 
    Collections.sort(names, new NameComparator(NameMember.FATHERSNAME)); 
    printNames(names); 
} 

private static void printNames(Collection<Name> names) { 
    names.stream().forEach(System.out::println); 
} 
Смежные вопросы