งานมอบหมายของฉัน: นำรายการเริ่มต้น ใส่ไว้ในไฟล์ข้อความชื่อ "Names_ages.txt" และใช้ การเรียงลำดับการเลือก (ไม่มีการเรียงลำดับอื่น) เพื่อเรียงลำดับตามตัวอักษร แต่ยังเรียงลำดับชื่อซ้ำตามอายุด้วย อายุเริ่มจากน้อยไปหามาก
รายการเริ่มต้น (ที่จะเรียงลำดับ):
โจนส์ 14
อับรามส์ 15
สมิธ 19
โจนส์ 9
อเล็กซานเดอร์ 22
สมิธ 20
สมิธ 17
ทิปเพิร์ต 42
โจนส์ 2
แฮร์คัมน์ 12
โจนส์ 11
รายการที่เสร็จสิ้นแล้ว (หลังการเรียงลำดับที่ถูกต้อง):
อับรามส์ 15
อเล็กซานเดอร์ 22
เฮิร์คแมน 12
โจนส์ 2
โจนส์ 9
โจนส์ 11
โจนส์ 14
สมิธ 17
สมิธ 19
สมิธ 20
ทิปเพิร์ต 42
คลาสสแกนเนอร์ของฉันเพื่อทำให้ไฟล์ข้อความเป็นอาร์เรย์ (ไม่มีข้อผิดพลาดทำงานได้ดี)
import java.util.*;
import java.io.*;
public class ScannerClass
{
public static void main(String[] args)
{
ScannerClass.textFile();
}
public static void textFile()
{
String line;
String[] names = new String[11];
try(BufferedReader reader = new BufferedReader(new FileReader("Names_ages.txt")))
{
line = reader.readLine();
for(int i = 0; i < 11; ++i)
{
names[i] = line;
//System.out.println(names[i]);
line = reader.readLine();
}
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
SortClass.selectionSort(names);
}
}
คลาสการเรียงลำดับการเลือกของฉัน (ฉันโพสต์สิ่งที่พิมพ์ออกมา):
import java.util.*;
import java.io.*;
public class SortClass
{
public static void selectionSort(String names[])
{
for(int i=0; i<names.length-1; ++i){
int minIndex = i;
for(int j=i+1; j<names.length; ++j)
{
if(names[j].compareTo(names[minIndex])<0)
{
int indexChar1 = names[j].indexOf(' ');
int indexChar2 = names[minIndex].indexOf(' ');
String name1 = names[j].substring(0, indexChar1);
String name2 = names[minIndex].substring(0, indexChar2);
if(name1.equals(name2))
{
String number1 = names[j].substring(indexChar1+1); //names[j]
String number2 = names[minIndex].substring(indexChar2+1); //names[minIndex]
int num1 = Integer.parseInt(number1); //names[j]
int num2 = Integer.parseInt(number2); //names[minIndex]
if(num1>num2)
continue;
if(num1<num2)
minIndex = j;
}
else
minIndex = j;
}
}
String temp = names[i];
names[i] = names[minIndex];
names[minIndex] = temp;
}
printNames(names);
}
public static void printNames(String names[])
{
for(int l=0; l<11; l++)
{
System.out.println(names[l]);
}
}
}
สิ่งที่พิมพ์ออกมา:
อับรามส์ 15
อเล็กซานเดอร์ 22
แฮร์คัมน์ 12
โจนส์ 2
Jones 11 (ต้องเปลี่ยนสองตัวนี้)
โจนส์ 9
โจนส์ 14
สมิธ 17
สมิธ 19
สมิธ 20
ทิปเพิร์ต 42
ฉันไม่แน่ใจว่าจะแก้ไขโจนส์ที่เลอะเทอะได้อย่างไร ฉันเดาว่า กำลัง ทำให้มันเป็นระเบียบ แต่เป็นคู่มากกว่าแค่สี่อัน ฉันจะแก้ไขอย่างไรเพื่อให้โจนส์เรียงลำดับตามอายุเหมือนกับรายการที่เสร็จสิ้นด้านบน