Tugas saya: Ambil daftar awal, masukkan ke dalam file teks bernama "Names_ages.txt" dan gunakan pengurutan pilihan (tidak ada pengurutan lain) untuk mengurutkannya berdasarkan abjad. tetapi juga mengurutkan nama yang berulang berdasarkan usia. Usia berpindah dari yang termuda ke yang tertua.
Daftar awal (untuk diurutkan):
Jones 14
Abram 15
Smith 19
jones 9
Alexander 22
Smith 20
Smith 17
Tippurt 42
jones 2
Herkamn 12
Jones 11
Daftar yang sudah selesai (setelah pengurutan yang benar):
Abram 15
Alexander 22
Herkman 12
jones 2
jones 9
Jones 11
Jones 14
Smith 17
Smith 19
Smith 20
Tippurt 42
Kelas pemindai saya untuk membuat file teks menjadi array (tidak ada kesalahan, berfungsi dengan baik)
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);
}
}
Kelas pengurutan pilihan saya (saya memposting apa yang dicetaknya):
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]);
}
}
}
Apa yang saya cetak:
Abram 15
Alexander 22
Herkamn 12
jones 2
Jones 11 (Keduanya perlu diganti)
Jones 9
Jones 14
Smith 17
Smith 19
Smith 20
Tippurt 42
Saya tidak yakin bagaimana cara memperbaiki kesalahan jones, saya rasa yang dilakukan adalah menatanya secara berurutan, melainkan berpasangan, bukan hanya keempatnya. Bagaimana cara memperbaikinya agar Jones berada dalam urutan usia seperti daftar akhir di atas?