我现在有一个需求,要求是这样的:
文件中有如下数据:
1,2,3,5,4
5,4,9,7,2
7,8,9,4,2
2,4,6,1,3
要求读取文件中的数据并进行排序,
第一道排序:先进行行排序,如第一行,排序后输出:1,2,3,4,5
第二道排序:进行列排序。第一列都要进行排序。
两道排序完成后的结果应该是这样的:
1,2,3,4,5
1,2,3,4,6
2,4,5,7,9
2,4,7,8,9
请各位高手帮帮忙,怎么写第二道排序的比较器啊??
我写的代码:public class AnalyseFile
{
public List<String> analyse(String filePath)
{
List<String> list = new ArrayList<String>();
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
String tempData = "";
while((tempData = buffer.readerLine()) != null)
{
String[] strs = tempData.split(",");
Arrays.sort(strs,new Comparator<String>()
{
public int compare(String str1,Stirng str2)
{
return Integer.valueOf(str1)-Integer.valueOf(str2);
}
});
list.add();
}
} public String arrayToString(String[] strs)
{
StringBuffer buffer = new StringBuffer();
for(String str : strs)
{
buffer.append(str + ",");
}
return buffer.toString().substring(0,buffer.length());
} public List<String> sortList(List<String> list)
{
Collections.sort(list,new Comparator()
{
public int compare(String str1,String str2)
{
return 1;//请各位大侠告诉我这个比较器该怎么写好???
}
});
} public void exportFile(String filePath,String exportPath)
{
PrintWriter out = new PrintWriter(exportPath);
for(String str : sortList(analyse(filePath)))
{
out.println(str);
}
out.close();
} public void main(String[] args)
{
AnalyseFile af = new AnalyseFile()
af.exportFile("./src/exam/data.txt","./src/exam/sortdata.txt");
}
}代码是现写的,没有用Eclipse可能会有些错,但是最主要是那两个比较器,请高手帮我补上,谢谢了。
文件中有如下数据:
1,2,3,5,4
5,4,9,7,2
7,8,9,4,2
2,4,6,1,3
要求读取文件中的数据并进行排序,
第一道排序:先进行行排序,如第一行,排序后输出:1,2,3,4,5
第二道排序:进行列排序。第一列都要进行排序。
两道排序完成后的结果应该是这样的:
1,2,3,4,5
1,2,3,4,6
2,4,5,7,9
2,4,7,8,9
请各位高手帮帮忙,怎么写第二道排序的比较器啊??
我写的代码:public class AnalyseFile
{
public List<String> analyse(String filePath)
{
List<String> list = new ArrayList<String>();
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
String tempData = "";
while((tempData = buffer.readerLine()) != null)
{
String[] strs = tempData.split(",");
Arrays.sort(strs,new Comparator<String>()
{
public int compare(String str1,Stirng str2)
{
return Integer.valueOf(str1)-Integer.valueOf(str2);
}
});
list.add();
}
} public String arrayToString(String[] strs)
{
StringBuffer buffer = new StringBuffer();
for(String str : strs)
{
buffer.append(str + ",");
}
return buffer.toString().substring(0,buffer.length());
} public List<String> sortList(List<String> list)
{
Collections.sort(list,new Comparator()
{
public int compare(String str1,String str2)
{
return 1;//请各位大侠告诉我这个比较器该怎么写好???
}
});
} public void exportFile(String filePath,String exportPath)
{
PrintWriter out = new PrintWriter(exportPath);
for(String str : sortList(analyse(filePath)))
{
out.println(str);
}
out.close();
} public void main(String[] args)
{
AnalyseFile af = new AnalyseFile()
af.exportFile("./src/exam/data.txt","./src/exam/sortdata.txt");
}
}代码是现写的,没有用Eclipse可能会有些错,但是最主要是那两个比较器,请高手帮我补上,谢谢了。
{
Collections.sort(list,new Comparator()
{
public int compare(String str1,String str2)
{
return 1;//请各位大侠告诉我这个比较器该怎么写好???
}
});
}
Collections.sort也只是对list里面的string进行排序,而这个string是类似这样1,2,3,5,4的字符串,根本不能解决,必须把逗号隔开的数再分出来。还是转化为数组操作吧。
public class TestFile {
/**
* @author Ydy form wyu
* @param a
* @param y
* @return
*/
public static int[][] sort(int[][] a,int y){
for(int i=0;i<y;i++){
Arrays.sort(a[i]);
}
for(int i=0;i<a[0].length;i++){//固定列
int[] temp = new int[y];
for(int j=0;j<y;j++){
temp[j] = a[j][i];//建立临时数组,取列的数据
}
Arrays.sort(temp);
for(int j=0;j<y;j++){
a[j][i]=temp[j];//赋值回去
}
}
return a;
}
public static void main(String args[])
{
int[][] a= {
{1,2,3,5,4},
{5,4,9,7,2},
{7,8,9,4,2},
{2,4,6,1,3}};
System.out.println(Arrays.deepToString(a));
sort(a,4);
System.out.println(Arrays.deepToString(a));
}
}
public List <String> sortList(List <String> list)
{
Collections.sort(list,new Comparator()
{
public int compare(String str1,String str2)
{
String[] strs1 = str1.split(",");
String[] strs2 = str2.split(",");
int length = strs1.length > strs2.length ? strs2.length : strs1.length;
for(int i = 0; i < length ; i++)
{
if(!strs1[i].trim().equlse(strs2[i].trim()))
{
return Integer.valueOf(strs1[i] - strs2[i]);
}
} return 0;//如果没有不同的直接返回相等 }
});
}
直接用数组排序的
运行结果正确。/**
分别对一个二维数组的行和列进行排序。
比如:
1,2,3,5,4
5,4,9,7,2
7,8,9,4,2
2,4,6,1,3
*/import java.util.*;public class ArraySort {
public static void main(String[] args) {
int[][] myArray = {
{1,2,3,5,4},
{5,4,9,7,2},
{7,8,9,4,2},
{2,4,6,1,3}
};
int[][] temp = getArray(myArray);
System.out.println("对每行排序后的结果:");
mySort(myArray);
System.out.println("对每列排序后的结果:");
mySort(temp);
}
public static void mySort(int[][] a) {
int rows = a.length;
int cols = a[0].length;
for(int i=0;i<rows;i++) {
Arrays.sort(a[i]);
for(int j=0;j<cols;j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
public static int[][] getArray(int[][] a) {
int rows = a.length;
int cols = a[0].length;
int[][] temp = new int[cols][rows];
for(int i=0;i<cols;i++) {
for(int j=0;j<rows;j++) {
temp[i][j] = a[j][i];
}
}
return temp;
}
}