关于Mysort实验的补发博客
关于本次课后的一些话
关于这次课上的关于sort -nk 2 -t: sort.txt
的实验没能在课上做出,有自身的知识不够,没能灵活运用所学知识,以及在当时课上走了会神,回过头来已经不知道该干些什么了,以至于在哪里手忙脚乱脑子一片空白。总之,你投入多少,就能获得多少,学与不学只在那一念之间。
我的实验过程
- 先弄清楚老师给的模板
public class Mysort {
public static void main(String [] args) {
String [] toSort = {"aaa:10:1:1",
"ccc:30:3:4",
"bbb:50:4:5",
"ddd:20:5:3",
"eee:40:2:20"};
System.out.println("Before sort:");
for (String str: toSort)
System.out.println(str);
//sort
int [] k3 = new int[toSort.length];
for (int i = 0 ; i < toSort.length ; i ++){
String [] tmp = toSort[i].split(":");
k3[i] = .....
}
Arrays.sort(k3);
System.out.println("After sort:");
Arrays.sort(k3);
for (int i = 0 ; i < k3.length;i++){
for (int j = 0 ; j <toSort.length;j++)
if (k3[i] == ) {
System.out.println(toSort[j]);
}}
}
}
我认为最关键的代码有三:
- 1.
String [] tmp = toSort[i].split(":")
- 2.
k3[] = ...
- 3.
if (k3[i] == ...)
首先,数组tmp是会随着循环而改变的。
for(int i = 0;i < toSort.length;i++){
String[] tmp = toSort[i].split(":")
}
/* i=0 , tmp = {aaa , 10 , 1 , 1}
i=1 , tmp = {ccc , 30 , 3 , 4}
i=2 , tmp = {bbb , 50 , 4 , 5}
....
*/
其次,实验的目的是为了达到类似命令:sort -nk 2 -t:
的效果所以有k3 = { 10 , 30 , 50 , 40 , 20}
k3[i] = Integer.parseInt(tmp[1]);
- 程序的最后一步中定义了一个循环,而循环中又套用了一个循环,而这么做的目的为:
for (int i=0;i<k3.length;i++){
//从k3[0]循环到k3[k3.lenrth-1]
for (int j = 0 ; j <toSort.length;j++)
//每个k3[i]与从toSort[0]到toSort[toSort.length-1]的每个元素一一匹配
if (k3[i] == Integer.parseInt((toSort[j].split(":"))[1])) {
System.out.println(toSort[j]);
}
}
- 最后要解决的问题是如何匹配:
我首先想到的是
k3[i] == Integer.praseInt(toSort[j].subString(4,6))
但后来我认为此方法具有一般性,如果toSort数组中的元素为:aa:10:1:1
那么程序就达不到要求。
突发奇想,有了以下尝试:
k3[i] == Integer.praseInt((toSort[j].split(":"))[1])
通过尝试我知道toSort[j].split(":")
这是一个数组那么它的第二个元素就是我们相比对的数。
我的代码
public class Mysort {
public static void main(String [] args) {
String [] toSort = {"aaa:10:1:1",
"ccc:30:3:4",
"bbb:50:4:5",
"ddd:20:5:3",
"eee:40:2:20"};
System.out.println("Before sort:");
String [] tmps = toSort[0].split(":");
//System.out.println(tmps[1]);
for (String str: toSort)
System.out.println(str);
int [] k3 = new int[toSort.length];
for (int i = 0; i < toSort.length;i ++){
String [] tmp = toSort[i].split(":");
// System.out.println(tmp[0]);
k3[i] = Integer.parseInt(tmp[1]);
}
// System.out.println(Arrays.toString(toSort[0].split(":")));
// System.out.println(k3[0]);
Arrays.sort(k3);
/*for (int a = 0 ; a<k3.length;a++){
System.out.println(k3[a]);
}
*/
//System.out.println(Integer.parseInt((toSort[0].split(":"))[1]));
System.out.println("After sort:");
Arrays.sort(k3);
for (int i = 0 ; i < k3.length;i++){
for (int j = 0 ; j <toSort.length;j++)
if (k3[i] == Integer.parseInt((toSort[j].split(":"))[1])) {
System.out.println(toSort[j]);
}}
}}