我正在编写的程序将对文本文件中的医院记录进行排序。文本文件的格式是lastname,firstname,age,roomnumber,它看起来完全像这样:
Franklin,Benjamin,74,18
Hamilton,Alexander,25,6
Thatcher,Margaret,65,3
Nixon,Richard,45,7
并且必须以特定格式打印,但用户将指定它们的排序方式。按姓氏排序时格式如下:
Last First Age Room
Coolidge Calvin 24 27
Franklin Benjamin 74 8
Hamilton Alexander 50 123
Nixon Richard 45 7
我一直试图找到存储线路的方法,但仍然可以将线路打印在一起以便将信息保存在一起。 必须通过命令行调用程序,同时调用程序,用户必须将输入文件指定为第一个参数(args [0])以及如何将其排序为第二个参数(args [1] )。 我尝试了几种不同的方法,但我一直陷入同一个地方,最好的办法是什么? 这是当前的代码顺便说一句。并且注释块是我尝试过的旧代码并保留它,以防万一。
import java.io.*;
import java.util.*;
public class PatientRecord {
public static void main(String args[])
{
System.out.println("Servando Hernandez");
System.out.println("Patient sorting Program.");
//
// Scanner scan = null;
// try
// {
// scan = new Scanner(new File(args[0]));
// }
// catch (FileNotFoundException e)
// {
// System.err.println("File path \"" + args[0] + "\" not found.");
// System.exit(0);
// }
//
// ArrayList<String> lines=new ArrayList<String>();
//
// while(scan.hasNextLine())
// lines.add(scan.nextLine());
//
// if(!(args.length == 0))
// {
// if(args[1] == lastname)
// {
// sortByLastName();
// }
// else if(args[1] == firstname)
// {
// sortByLastName();
// }
// else if(args[1] == age)
// {
// sortByAge();
// }
// else if(args[1] == roomnumber)
// {
// sortByRoomNumber();
// }
// }
//
List<Patient> patients = new ArrayList<>();
while(scan.hasNextLine())
{
String[] values= scan.nextLine().split(",");
patients.add(new Patient())
}
String sortType= args[1]
switch(sortType))
{
case "firsname":
break;
case "lastname":
break;
case "age":
break;
case "roomnumber":
break;
}
}
// static String sortByLastName()
// {
// Collections.sort(lines);
//
// for(String x : lines)
// System.out.println(x);
// }
class Patient
{
String firstName;
String lastName;
int age;
int roomNumber;
}
答案 0 :(得分:1)
你应该写一个自定义比较器,让我们称之为PatientComparator。我不会完全实施比较方法,这是你的工作: - )
class PatientComparator implements Comparator<Patient> {
String sortType;
public PatientComparator(String sortType) {
this.sortType = sortType;
}
@Override
public int compare(Patient a, Patient b) {
// TODO: write your switch case here
return a.firstName.compareTo(b.firstName);
}
然后,您可以使用自己的比较器对患者进行排序:
Collections.sort(patients, new PatientComparator(arg[1]));
答案 1 :(得分:0)
好吧,我首先将你的练习分为两部分:
1-通过命令行使用args [0]调用程序。浏览文件并向用户显示内容(通过尊重您的格式)。
2-为脚本添加排序(这可以通过多种方式完成;通常通过覆盖compare方法)。执行步骤1,对arg [1]进行排序,然后输出。
为了让您入门,我已经为您完成了第1步,而没有对输出进行任何格式化。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class Test3 {
//You will store each line as an array of strings
//then you store the lines in a list of arrays of strings
public static ArrayList<String[]> mainList=new ArrayList<String[]>();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new FileReader(args[0]));
try {
//reading each line from the input file
String line = br.readLine();
//spliting the line by comma (,) which will return
//an array of strings - our names and numbers in string format
while (line != null) {
String[] lineElements=line.split(",");
line = br.readLine();
mainList.add(lineElements);
}
} finally {
br.close();
}
//showing to the user
for (String[] line :mainList){
for (String x:line){
System.out.print(x+" ");
}
System.out.println("");
}
}
}
您只需编译:{{1}}
然后,您只需在实际运行时指定文件的位置:javac name.java
我使用你的示例文件运行它,我在控制台中得到它(你只需要格式化输出):
java name /path/to/your/file/
还有很多工作要做,但我认为这是一个很好的开始!