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

高手请进,求解一个Java面试编程题!
一个文本文件中约有10万多行的数据,每个数据占一行(数据为一个整数)。要求:统计出总行数,并找出出现次数最多的那个整数。

大家帮忙,关键是怎样找出出现次数最多的那个数


------解决方案--------------------
package test;

import java.io.*;
import java.util.ArrayList;

public class TestArray {

/*
* public Object []getList(){//获得数组! try{ ArrayList list=new ArrayList();
* BufferedReader in = new BufferedReader(new FileReader( "d:\\test "));
* String str; if((str=in.readLine())!=null){ list.add(str);
* } return list.toArray();
*
* }catch(Exception e){ e.printStackTrace(); return null; } }
*/
public Object[] getList() {// 测试数组
String[] bb = new String[200];
for (int i = 0; i < bb.length; i++) {
bb[i] = String.valueOf((int) (Math.random() * 50));
}
return bb;
}

public int getSize() {// 统计出总行数
Object[] o = getList();
return o.length;
}

public int[] getMaxSameNo() {// 找出出现次数最多的那个数组

Object o[] = getList();

int no[] = new int[o.length];
for (int i = 0; i < o.length; i++) {
no[i] = Integer.parseInt((String) o[i]);

}
java.util.Arrays.sort(no);// 数组排序
for (int i = 0; i < no.length; i++) {
System.out.println( "array[ " + i + "]= " + no[i]);
}

int maxsum = getSum(no);// 出现次数最多的数到底出现了几次
return getInt(no, maxsum);// 找出出现次数最多的那个数

}

public int getSum(int[] no) {// 此方法返回出现次数最多的数到底出现了几次!
ArrayList sumlist = new ArrayList();
int sum = 1;
for (int i = 0; i < no.length - 1; i++) {
if (no[i] == no[i + 1]) {
sum++;// 相临两个相等计数器+1
} else {
// 不相等向集合里加入
sumlist.add(sum);
// 计数器复位继续比较
sum = 1;
continue;
}
}
int max = 0;
for (int i = 0; i < sumlist.size(); i++) {// 此循环取出集合里最大的数!
if (Integer.parseInt(sumlist.get(i).toString()) > max) {
max = Integer.parseInt(sumlist.get(i).toString());
}
}
return max;
}

public int[] getInt(int[] no, int a) {// 此方法返回出现次数为a的数组,可能有多个数字出现相同的次数的情况,所以返回的是数组
ArrayList sumlist = new ArrayList();
int sum = 1;
for (int i = 0; i < no.length - 1; i++) {
if (no[i] == no[i + 1]) {
sum++;
} else {
if (sum == a) {
sumlist.add(no[i]);
System.out.println(no[i] + "一共出现了 " + a + "次! ");
} else {
sum = 1;
continue;
}

}
}
int aa[] = new int[sumlist.size()];
for (int i = 0; i < aa.length; i++) {
aa[i] = Integer.parseInt((sumlist.get(i).toString()));
}
return aa;

}

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
TestArray test = new TestArray();
int count = test.getSize();
System.out.println( "一共有 " + count + "条记录! ");
int[] max = test.getMaxSameNo();
System.out.println( "出现次数最多的数为: ");
for (int i = 0; i < max.length; i++) {
System.out.print(max[i] + ", ");
}

}

}

------解决方案--------------------

import java.io.File;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Arrays;
public class TestSum {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ArrayList <Integer> dataSet = new ArrayList <Integer> (500) ;