Как использовать метод Arrays.sort() для сортировки имен учащихся?

#java #arrays #sorting #for-loop #text-files

#java #массивы #сортировка #for-цикл #текстовые файлы

Вопрос:

Я хочу использовать Arrays.sort() метод для сортировки имен учащихся в алфавитном порядке и записать его в новый текстовый файл с именем StudentNames . Я пытался это сделать, но это выдало бы мне ошибку. Я не знаю, правильно ли я его использовал или разместил в правильном положении.

Пример ввода:

 Select Your Class Size!

A 6x5 Classroom or a 3X10 classroom?
 Enter '6x5' or '3x10' please!

6x5

Ok, so you have selected 6x5
Your classroom size looks like this:

XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX

Now Enter The Number Of Students!
4

Enter the names of the 4 students!

Hussain
User
Jacob
Bob

The Student Names Have Been Sorted In An Alphabetical Order
The Names And Seat Location Of The Student Are As Follows:

Hussain Seat Location: (1)(1)
User Seat Location: (1)(2)
Jacob Seat Location: (1)(3)
Bob Seat Location: (1)(4)
  

Пример вывода:

 Select Your Class Size!

A 6x5 Classroom or a 3X10 classroom?
 Enter '6x5' or '3x10' please!

6x5

Ok, so you have selected 6x5
Your classroom size looks like this:

XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX

Now Enter The Number Of Students!
4

Enter the names of the 4 students!

Hussain
User
Jacob
Bob

The Student Names Have Been Sorted In An Alphabetical Order
The Names And Seat Location Of The Student Are As Follows:

Bob Seat Location: (1)(1)
Hussain Seat Location: (1)(2)
Jacob Seat Location: (1)(3)
User Seat Location: (1)(4)
  

Вывод, который я на самом деле получаю:

 Select Your Class Size!

A 6x5 Classroom or a 3X10 classroom?
 Enter '6x5' or '3x10' please!

6x5

Ok, so you have selected 6x5
Your classroom size looks like this:

XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX

Now Enter The Number Of Students!
4

Enter the names of the 4 students!

Hussain

The Student Names Have Been Sorted In An Alphabetical Order
The Names And Seat Location Of The Student Are As Follows:
  

Он ничего не выводит, я прокомментировал свою catch инструкцию print, чтобы она показывала ошибку, которую я получу, но она ничего не выводит.

Код:

 import java.util.*;
import java.io.*;


// Create a class and method
public class Main {
  public static void main(String[] args) {

    // Clear the screen
    System.out.print("33[H33[2J");
    System.out.flush();

    // Create scanner object
    Scanner inp = new Scanner(System.in);

    // Create a print statement
    System.out.println("Select Your Class Size!n");
    System.out.println("A 6x5 Classroom or a 3X10 classroom?n Enter '6x5' or '3x10' please!n");

    String Class1 = "6x5";
    String Class2 = "3x10";

    Double input[] = new Double[1];

    String selectClassSize = inp.next();

    int indexOfx = selectClassSize.indexOf('x');
    int xcount = 0;

    boolean containsx = indexOfx == 0 || indexOfx == (selectClassSize.length() - 2);

    if (containsx) {
      input[xcount] = Double.parseDouble(selectClassSize.replace("x", ""));
      
      System.out.println("nOk, so you have selected "   Class1);
      System.out.println("Your classroom size looks like this:n");

      int rows = 6;
      int columns = 5;
      int classSize[][] = new int [rows][columns];
      
      for(int i = 0; i < classSize[0].length; i  ){
        for(int j = 0; j < classSize.length; j  ){
            System.out.print("X");
      }
      System.out.println();
    }
      xcount  ;

    } else {
      System.out.println("nOk, so you have selected "   Class2);
      System.out.println("Your classroom size looks like this:n");

      int rows2 = 3;
      int columns2 = 10;
      int classSize2[][] = new int [rows2][columns2];
        for(int x = 0; x < classSize2[0].length; x  ){
          for(int y = 0; y < classSize2.length; y  ){
              System.out.print("X");
      }
      System.out.println();
      }
    }

    // Create a scanner variable
    System.out.println("nNow Enter The Number Of Students!");

    int numOfStudents = inp.nextInt();

    // Create a counter variable to count upto the numOfStudents and break the loop
    int counter = 0;

    System.out.println("nEnter the names of the "   numOfStudents   " students!n");
     try {

      // Initialize the new objects
      FileWriter fw = new FileWriter("StudentNames");
      BufferedWriter bw = new BufferedWriter(fw);

      String[] names = new String[numOfStudents];
      String[] seats = new String[numOfStudents];
      
      int row = 0, column = 1;
      
      // Output the first names in the 
      for (int x = 0; x < numOfStudents; x  ) {
          names[x] = inp.next();
          if(containsx) {
              if(row >= 6) {
                  column  ;
                  row = 0;
              }
          }
          else {
              if(row >= 3) {
                  column  ;
                  row = 0;
              }
          }
          Arrays.sort(names);
          seats[x] = "(" Integer.toString(column) ")"   "(" Integer.toString(  row) ")";
          bw.write(Arrays.toString(names) " Seat Location: " seats[x]);
          bw.newLine();
      }

      bw.close();
      fw.close();

      // Catch any errors
    } catch (Exception e) {
      // System.out.println("An Error Occured!");
    }
     try {

      // Initialize the new objects
      FileReader fr = new FileReader("StudentNames");
      BufferedReader br = new BufferedReader(fr);

      String line = br.readLine();

      // Start a while loop to output the data from the file
      System.out.println("nThe Student Names Have Been Sorted In An Alphabetical Order");
      System.out.println("The Names And Seat Location Of The Student Are As Follows:n");
      
      while (line != null) {
          System.out.println(line);
          line = br.readLine();
        }
      br.close();
      fr.close();

      // Catch any errors
    } catch (Exception e1) {
      System.out.println("An Error Occured!");
    }
  }
}
  

Комментарии:

1. Ваш текущий результат хорош, но гораздо важнее то, какую именно ошибку вы получаете. Вставьте этот / обновите этот вопрос вместе с ним.

2. Кроме того, похоже Arrays.sort , что нигде в коде, который вы вставили. В этом случае — нет, вы неправильно его используете.

3. Ok обновит мой пост тем, что я пробовал

4. Его обновленный @rzwitserloot, пожалуйста, проверьте это

Ответ №1:

Я не прочитал весь ваш код, но вы используете циклы, и единственное, что вам нужно сделать в первую очередь, это получить Arrays.sort() вне цикла — его нужно запустить только один раз.

Вот несколько примеров кода:

  String[] names = new String[]{"Bob", "User", "Hussian", "Gandalf"};
 Arrays.sort(names);
 System.out.println(Arrays.toString(names).replace(",",",n"));
  

Вывод:

 [Bob,
 Gandalf,
 Hussain,
 User]

Process finished with exit code 0
  

Примечание: вы также можете преобразовать все в нижний / верхний регистр, если хотите игнорировать сортировку по регистру букв.