我的归档:获取初始列表,将其放入名为" Names_ages.txt"的文本文件中。并使用选择排序(没有其他类型)按字母顺序对其进行排序。但也按年龄排序重复名称。年龄从最小到最老。
初始列表(待排序):
Jones 14
Abrams 15
史密斯19 琼斯9Alexander 22
史密斯20 史密斯17Tippurt 42
琼斯2
Herkamn 12
琼斯11完成列表(正确排序后):
Abrams 15
Alexander 22
Herkman 12
琼斯2
琼斯9 琼斯11Jones 14
史密斯17 史密斯19 史密斯20Tippurt 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]);
}
}
}
我打印的是什么:
Abrams 15
Alexander 22
Herkamn 12
琼斯2
琼斯11 (这两个需要切换)
琼斯9
Jones 14
史密斯17 史密斯19 史密斯20Tippurt 42
我不确定如何修复琼斯搞砸了,我猜它 将它们整理好,而不是成对而不是全部四个。我如何修复它,以便琼斯在年龄方面按顺序排列,就像上面的完成列表一样?
答案 0 :(得分:2)
经过小修改后,这是您的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]);
}
}
}