#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
Примечание: вы также можете преобразовать все в нижний / верхний регистр, если хотите игнорировать сортировку по регистру букв.