日期:2014-05-20  浏览次数:20755 次

一道数组算法题
编写一个Java应用程序,对用户输入的任意一组字符如{1,3,4,7,2,1,1,5,2},输出其中出现次数最多且数值最大的字符,并显示其出现次数。它的源代码是这样的:
import java.io.*;
import java.util.*;

class test1
{
public static void main(String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

System.out.println("请输入一组字符,字符间用,间隔");

String strInput=br.readLine();

StringTokenizer st=new StringTokenizer(strInput,",");

int array[]=new int[10];

int max=0;

int maxNumber=0;

while(st.hasMoreTokens())
{
String token=st.nextToken();

int number=Integer.parseInt(token);

array[number]++;

if(array[number]>max)
{
max=array[number];
maxNumber=number;
}
else if(array[number]==max)
{
if(number>maxNumber)
maxNumber=number;
}
}
System.out.println("出现次数最多的数字是:"+maxNumber);
System.out.println("出现次数为:"+max);
}
}
我想问一下在while循环中对数子的比较和判断找出最大数和气出现次数是一种怎样的思维,编程思想。这种发发好像很深奥似的。求更简单的方法!

------解决方案--------------------
你先自己写个算法,然后再在你写的算法上加以改进不就是更简单的了
------解决方案--------------------
思想就是利用 一位数组的下标 代表 0-9 10个数字 数组中的值代表该下标出现的次数
------解决方案--------------------
楼主一定要把分给我啊,我没吃晚饭,在这里帮你分析代码问题。
这个算法实现的是:array[num]代表的是num出现的次数,既他的想法是数组的下标存储的是字符,而数组元素的值存储的是字符出现的字数。
看似合理,其实有缺陷和bug.利用下标存储字符,那么,你随便输入一个大于下标的数字,例如99,就会出现数组越界的异常:
1,3,4,99,2,1,1,5,2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 99
at com.bob.test1.test1.main(test1.java:32)

这个问题其实很难的,网上搜出的设计到很多数组,排序,红黑树什么的知识。至于怎么修改,有点难,挺复杂的,这个问题。有时间再想想怎么写。

Thank you in advance for giving me credits。
------解决方案--------------------
不错,应该可以行
------解决方案--------------------
先自己写个算法,然后再在你写的算法上加以改进不就是更简单的了