我的任务:获取初始列表,将其放入名为“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
我不知道如何解决琼斯的困惑,我猜它正在将它们按顺序排列,而是成对排列,而不是全部四个。我该如何修复它,以便琼斯按照年龄顺序排列,就像上面的最终列表一样?
最佳答案
这是经过细微修改后的 SortClass
。测试一下并告诉我
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)
{
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.compareTo(name2)<0)
{
minIndex = j;
} else if(name1.compareTo(name2) == 0){
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;
}
}
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]);
}
}
}
关于java - 如何在名称组中首先按字母顺序然后按年龄对字符串(包含名称和年龄)进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42570050/