刘德华#222
张学友#204
郭富城#215
黎明#215
-----------------------
以上是一个文本内容,要求对#后面的分数进行排序,然后写入另一个文件中...
要考虑到有可能名字重复和#后面数字重复的情况
-----------------------
请问谁会?或给下思路,大概用哪个类?
----------------解决方案--------------------------------------------------------
#后如没重复的话,可用HASHMAP,数字做为键,名字做为值.重复就得再想想.
----------------解决方案--------------------------------------------------------
是的,麻烦就麻烦在#二边都有可能会重复
----------------解决方案--------------------------------------------------------
采用类进行排序不知道可行吗?
----------------解决方案--------------------------------------------------------
是的,用类比较灵活点~~不过要实现Compareable
----------------解决方案--------------------------------------------------------
import java.util.*;
import java.io.*;
public class SortTest{
public static void main(String[] args) throws IOException{
List<ArraysSort> list=new ArrayList<ArraysSort>();
BufferedReader buf=new BufferedReader(new FileReader("1.txt"));
ArraysSort sort=null;
String line=null;
for(;(line=buf.readLine())!=null;){
StringTokenizer token=new StringTokenizer(line,"#");
String value=token.nextToken();
int key=Integer.parseInt(token.nextToken());
sort=new ArraysSort(key,value);
list.add(sort);
}
buf.close();
ArraysSort[] sorts=new ArraysSort[list.size()];
for(int i=0;i<sorts.length;i++){
sorts[i]=(ArraysSort)list.get(i);
}
Arrays.sort(sorts);
PrintWriter print=new PrintWriter(new FileWriter("2.txt"),true);
for(int i=0;i<sorts.length;i++){
print.println(sorts[i].toString());
}
print.close();
System.out.println("ok");
}
}
class ArraysSort implements Comparable{
private int intKey;
private String strValue;
public ArraysSort(int intKey,String strValue){
this.intKey=intKey;
this.strValue=strValue;
}
public int getKey(){
return this.intKey;
}
public String getValue(){
return strValue;
}
public int compareTo(Object obj){
ArraysSort arrSort=(ArraysSort)obj;
if(intKey>arrSort.intKey) return 1;
if(intKey<arrSort.intKey) return -1;
return 0;
}
public String toString(){
return strValue+"#"+intKey;
}
}
----------------解决方案--------------------------------------------------------
谢谢楼上的各位帮忙
public int compareTo(Object obj) //这里的obj代表的是什么? 是每个ArraysSort的实例吗?
{
ArraysSort arrSort=(ArraysSort)obj;
if(intKey>arrSort.intKey) return 1; //inKey和arrSort.inKey怎么比的呀?intKey和arrSort.intKey每次比的不是同一个吗?
if(intKey<arrSort.intKey) return -1;
return 0;
}
----------------解决方案--------------------------------------------------------
import java.util.*;
import java.util.Collections.*;
import java.io.*;
public class StringSort implements Comparable<StringSort>{
String s;
StringSort(String string){
s=string;
}
public int compareTo(StringSort o){
String str=o.s;
int i1=Integer.parseInt(s.substring(s.indexOf("#")+1));
int i2=Integer.parseInt(str.substring(str.indexOf("#")+1));
int result=(i1>i2 ? 1:(i1==i2 ? 0 : -1));
if(result==0){
String s1=s.substring(0,s.indexOf("#"));
String s2=str.substring(0,str.indexOf("#"));
result=s1.compareTo(s2);
}
return result;
}
public String toString(){
return s;
}
public static void main(String[] args) throws Exception{
StringSort s1=new StringSort("刘德华#222");
StringSort s2=new StringSort("张学友#204");
StringSort s3=new StringSort("郭富城#215");
StringSort s4=new StringSort("黎明#215");
ArrayList<StringSort> al=new ArrayList<StringSort>();
al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);
System.out.println(al);
Collections.sort(al);
System.out.println(al);
BufferedWriter bw=new BufferedWriter(new FileWriter("1.txt"));
for(int i=0;i<al.size();i++){
String ss=(al.get(i)).s;
bw.write(ss,0,ss.length());
bw.newLine();
}
bw.close();
}
}
我的,匆忙写的,,读取文件的过程就没写了..
----------------解决方案--------------------------------------------------------
obj 是一个Object类的一个对象,是所有类的父类!
ArraySort也是Object类的一个子类,因为比较的是ArraySort类的两个对象,因此要将obj对象转换成ArraySort类型的对象!
----------------解决方案--------------------------------------------------------
import java.util.*;
import java.io.*;
public class SortTest{
public static void main(String[] args) throws IOException{
List<ArraysSort> list=new ArrayList<ArraysSort>();
BufferedReader buf=new BufferedReader(new FileReader("1.txt"));
ArraysSort sort=null;
String line=null;
for(;(line=buf.readLine())!=null;){
StringTokenizer token=new StringTokenizer(line,"#");
String value=token.nextToken();
int key=Integer.parseInt(token.nextToken());
sort=new ArraysSort(key,value);
list.add(sort);
}
buf.close();
ArraysSort[] sorts=new ArraysSort[list.size()];
for(int i=0;i<sorts.length;i++){
sorts[i]=(ArraysSort)list.get(i);
}
Arrays.sort(sorts);
PrintWriter print=new PrintWriter(new FileWriter("2.txt"),true);
for(int i=0;i<sorts.length;i++){
print.println(sorts[i].toString());
}
print.close();
System.out.println("ok");
}
}
class ArraysSort implements Comparable{
private int intKey;
private String strValue;
public ArraysSort(int intKey,String strValue){
this.intKey=intKey;
this.strValue=strValue;
}
public int getKey(){
return this.intKey;
}
public String getValue(){
return strValue;
}
public int compareTo(Object obj){
ArraysSort arrSort=(ArraysSort)obj;
if(intKey>arrSort.intKey) return 1; //inKey和arrSort.inKey怎么比的呀?intKey和arrSort.intKey每次比的不是同一个吗?
if(intKey<arrSort.intKey) return -1;
return 0;
}
public String toString(){
return strValue+"#"+intKey;
}
}
最不明白的就是如何来实现 public int compareTo(Object obj) 方法,
其中更不解的是这一句 intKey > arrSort.intKey
intKey是这个类的一个变量按说如果和arrSort.inKey比较,其中的intKey应该是不同的吧?
可是哪里可以看出intKey 和arrSort.intKey代表的是不同的intKey呢?
----------------解决方案--------------------------------------------------------