更多追问追答
追问
谢谢大哥,不过如果出现的次数相同,要把后出现的数字排在后面,这点没做到啊
追答
哦,没注意这要求。
public class A {
public static void bubbleSort(int[] n, int[] idx) {
int t, j;
for (int i=0;i
for (j=0;j
if (n[j]>n[j+1]) {
t = n[j];n[j] = n[j+1];n[j+1] = t;
t = idx[j]; idx[j] = idx[j+1]; idx[j+1] = t;
}
}
}
}
public static void main(String argv[]) {
String s = "10771034948754277771578";
int n[] = {0,0,0,0,0,0,0,0,0,0};
int idx[] = {0,0,0,0,0,0,0,0,0,0};
int k= 0;
boolean f;
for (int i=0;i
f = false;
int ch = s.charAt(i)-'0';
for (int j=0;j
if (idx[j] == ch) {
n[j]++;
f = true;
}
}
if (!f) {
idx[k] = ch;
n[k++] = 1;
}
}
bubbleSort(n, idx);
for (int i=0;i
System.out.printf("%d: %d次\n",idx[i], n[i]);
}
}
}
按你的要求,你给出的结果也是错的,8出现在5前面.
追问
那是我没说清楚,我的错,我的意思是如果出现的次数相同,那就比较最后出现的位置,例如我给出的那个字符串,8和5都是出现2次,但8最后出现的位置比5最后出现的位置靠后,那么8就排在5的后面
追答
这样上面这程序就不能用了。
先定义一个Bean:
public class B implements Comparable {
private char ch;
private int size;
private int disp;
public int getDisp() {
return disp;
}
public void setDisp(int disp) {
this.disp = disp;
}
public char getCh() {
return ch;
}
public void setCh(char ch) {
this.ch = ch;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
@Override
public int compareTo(B o) {
if (this.size==o.getSize())
return this.disp-o.getDisp();
return this.size-o.getSize();
}
}
-------------------------------------
再写主程序:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class A {
public static B findItem(List l, char ch) {
for (B b : l) {
if (b.getCh() == ch) {
return b;
}
}
return null;
}
public static void main(String argv[]) {
List l = new ArrayList();
String s = "10771034948754277771578";
for (int i=0;i
B b = findItem(l, s.charAt(i));
if (b == null) {
b = new B();
b.setCh(s.charAt(i));
b.setSize(1);
b.setDisp(i);
l.add(b);
} else {
b.setSize(b.getSize()+1);
b.setDisp(i);
}
}
//补齐缺少的'0'-'9',如果不需要 6: 0次,这样的数据,字符串里没有,就删除这一段
for (int i=0;i<10;i++) {
B b = findItem(l, (char) ('0' + i));
if (b == null) {
b = new B();
b.setCh((char)('0' + i));
b.setSize(0);
b.setDisp(0);
l.add(b);
}
}
Collections.sort(l);
for (B b: l)
System.out.printf("%c: %d次\n",b.getCh(), b.getSize());
}
}
-----------------------
6: 0次
3: 1次
9: 1次
2: 1次
0: 2次
5: 2次
8: 2次
4: 3次
1: 3次
7: 8次
追问
可以了,谢谢老哥