java问题求助?
首先我说一下,你的程序抛开算法不对的问题,还有几点:
1、你这段java,完全是用c的写法来做的,没有任何地方体现java面向对象的思想。
2、int[] times = new int[101];你定义了两个101大小的数组,那么,当实际输入的数字真的超过了101个你怎么办?必定抛出数组溢出异常。这里建议了解一下java的集合对象List,以及其最常用的实现类ArrayList。
3、再说一下你的算法吧,你的问题在于最终的结果没有排序,这样统计次数的想法还是很好的。为了完成最终排序,我给你改了一下,声明了一个二维数组sort[][],其中第一列用来存储输入的数字,第二列用来存储数字出现的次数(如果是我来设计算法的话我会采用java的Map对象来存储这个二维数组),之后只要分别实现按数字大小降序排列以及再按照出现次数降序 排列就好了。按数字降序排列比较简单,因为你的数字本身就是升序排列的,反过来遍历就好了。按照次数排列的话我使用冒泡排序进行。
综上,具体代码为:
运行结果:
具体代码为:
public class Test3 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a;
int count = 0;
int[] times = new int[101];
int[] array = new int[101];
do {
a = in.nextInt();
if (a >= 1 && a <= 100) {
times[a]++;
}
} while (a != 0);
for (int i = 0; i < times.length; i++) {
array[i] = i;
count++;
}
// 采用降序,max为最后一个元素
int max = count;
// 定义二维数组sort[输入的数字][数字的次数],
// 例如输入了三次100,则sort[i][0] = 100, sort[i][1] = 3,i为100所在的行数
int sort[][] = new int[101][2];
int i;
int j = 0;
// 降序遍历输入的数字,按倒序将数字及其出现的次数存到sort中,你可以在这里遍历输出一下sort看看
for (i = 100; i > 0; i--) {
if (array[i] < max) {
max = array[i];
if (times[i] >= 1) {
sort[j][0] = max;
sort[j][1] = times[i];
j++;
}
}
}
//二维数组冒泡排序,根据第二列(数字的次数)进行降序冒泡排列
//因为第一列数字本身就是降序排列的,所以根据第二列次数降序冒泡后,第一列仍然是降序
int temp;
for (i = 0; i < 101; i++) {
for (j = 0; j < 101 - i - 1; j++) {
for (int k = 0; k < 2; k++) {
if (sort[j][1] < sort[j + 1][1]) {
temp = sort[j + 1][k];
sort[j + 1][k] = sort[j][k];
sort[j][k] = temp;
}
}
}
}
//输出结果
//其实你那个if==1,又if>1,不就是if>0吗
for (i = 0; i < 101; i++) {
if (sort[i][1] > 0) {
System.out.printf("%d occurs %d time\n", sort[i][0], sort[i][1]);
}
}
}
}
太谢谢你了,刚开始学java,很多不是很懂。谢谢你