java问题求助?

前两张是我写的代码,和输出结果,题目要求输出的顺序按次数照从大到小排列,当出现次数相同时,较大值优先输出,求帮助... 前两张是我写的代码,和输出结果,题目要求 输出的顺序按次数照从大到小排列,当出现次数相同时,较大值优先输出,求帮助 展开
 我来答
澈丶233
2019-10-23 · TA获得超过169个赞
知道小有建树答主
回答量:446
采纳率:94%
帮助的人:103万
展开全部

首先我说一下,你的程序抛开算法不对的问题,还有几点:

1、你这段java,完全是用c的写法来做的,没有任何地方体现java面向对象的思想。

2、int[] times = new int[101];你定义了两个101大小的数组,那么,当实际输入的数字真的超过了101个你怎么办?必定抛出数组溢出异常。这里建议了解一下java的集合对象List,以及其最常用的实现类ArrayList。

3、再说一下你的算法吧,你的问题在于最终的结果没有排序,这样统计次数的想法还是很好的。为了完成最终排序,我给你改了一下,声明了一个二维数组sort[][],其中第一列用来存储输入的数字,第二列用来存储数字出现的次数(如果是我来设计算法的话我会采用java的Map对象来存储这个二维数组),之后只要分别实现按数字大小降序排列以及再按照出现次数降序 排列就好了。按数字降序排列比较简单,因为你的数字本身就是升序排列的,反过来遍历就好了。按照次数排列的话我使用冒泡排序进行。

综上,具体代码为:

8-26行

27-44行

45-67行完

运行结果:



具体代码为:

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,很多不是很懂。谢谢你
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式