2015-02-12 6 views
2

Я делаю программу, и мне нужно отсортировать этот список имен и фамилий для создания схемы посадочных мест на самолете. Это 2-мерный массив, первый столбец имеет первое имя, а второй столбец имеет фамилию соответствующего человека в первом столбце. Мне нужно отсортировать это в алфавитном порядке по фамилии, имени, но я не могу понять, как сортировать фамилию, а затем сохранить соответствующую фамилию.Сортировка первого и последнего имен Array

Это мой код:

package assignment_6_1; 
import java.util.Scanner; 
import java.util.Arrays; 
public class Assignment_6_1 { 

    public static void main(String[] args) { 
     //Create a Scanner 
     Scanner input = new Scanner(System.in); 
     //Create int & string [] 
     String[][]firstAndLastNames = new String[36][2]; 
     int[]heightOfPerson = new int[36]; 
     String[][]seatingChartDiagram = new String[9][4]; 
     int[][]seatRequest = new int [36][2]; 

     //Gather list of names and heights 
     for(int i=0; i<heightOfPerson.length; i++) 
     { 

      //Get first name 
      System.out.println("Enter Your First Name: "); 
      firstAndLastNames[i][0] = input.next(); 

      //Get last name 
      System.out.println("Enter Your Last Name: "); 
      firstAndLastNames[i][1] = input.next(); 

      //Get height in inches 
      System.out.println("Enter your height (Iches) : "); 
      heightOfPerson[i] = input.nextInt(); 

      //Is there a seat request or not 
      System.out.println("Do you want to request a seat ?"); 
      String ifSeatRequest = input.next(); 

      //Get seat request 
      if(ifSeatRequest.equals("Yes") || ifSeatRequest.equals("yes")) 
      { 
       System.out.println("Enter the seat row you want: "); 
       seatRequest[i][0] = input.nextInt(); 
       System.out.println("Enter the seat number you want in that row: "); 
       seatRequest[i][1] = input.nextInt(); 
      } 
      else 
      { 
       //set the request colum for that person to 0 for no request 
       seatRequest[i][0] = 0; 
       seatRequest[i][1] = 0; 
      } 
      //Prints passenger manifest when list is full 
      if(firstAndLastNames[35][1] != null){ 
      System.out.println("All Seats are Filled"); 
      break;} 
     } 
     String[]firstNameSort = new String[36]; 
     //put the first names into another array to sort 
     for(int j=0; j<heightOfPerson.length; j++) 
     { 
     firstNameSort[j] = firstAndLastNames[j][1]; 
     } 
     //Alphabetize first name list 
     Arrays.sort(firstNameSort); 
     String[][]firstNameAlphLast = new String[36][2]; 
     String[][]nameAlph = new String[36][2]; 
    } 
} 

Для: Он принимает входные данные пользователя для 36 имен, высот, и если человек хочет сделать запрос гостиной. Я заставил его скопировать массив 2 другого массива, а затем я в алфавитном порядке перечислил фамилии. Теперь я не могу понять, как получить соответствующие имена для алфавитных фамилий.

+1

Почему бы вам не создать объект Person с тремя свойствами ('lastName',' firstName' и 'height')? –

+0

@FlorentBayle Я никогда не слышал о объекте человека, что это такое – Garrett

+0

@FlorentBayle Все, о чем они говорили в лесу, были строковыми и int-массивами – Garrett

ответ

1

Попробуйте этот вид: -

Arrays.sort(firstAndLastNames, new Comparator<String[]>() { 
     @Override 
     public int compare(final String[] a1, final String[] a2) { 
      return a1[1].compareTo(a2[1]) + a1[0].compareTo(a2[0]); 
     } 
    }); 
+0

Я не знал, что Arrays.sort может принять компаратора .. Спасибо :) – Richard

0

Вы должны использовать алгоритм сортировки. Вы можете открыть их здесь: Sorting algorithms. У вас есть образец кода для каждого метода.

Будьте осторожны при сравнении строк, вы должны использовать метод метод CompareTo() следующим образом:

string1.compareTo(string2); 

Results: 
-1 if string1 is before string2 in the alphabetical order : "Hello".compareTo("World"); 
0 if string1 is exactly the same than string2 : "Hello".compareTo("Hello); 
1 if string1 is after string2 in the alphabetical order : "World.compareTo("Hello"); 

Если вы решили создать еще один массив для хранения вашей отсортированный массив, Жюст создать с помощью того же параметра. Здесь, создать этот один:

String[][] firstAndLastNamesSorted = new String[36][2]; 

Для примера, вы должны также сортировать как firstAndLastNames и seatRequest массивы в то же время, согласно Вашим критериям сортировки.

Смежные вопросы