您的位置:首页 > 其它

从文件中读取N多数字,找到最大的5个数字

2017-04-13 00:30 134 查看
package cpm.it.test;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Arrays;

/**

 * 需求:

 * <p>读取一个文件,一次读取一个数字,有N多个数字,数组放不下;要求找到5个最大的数字,所以不能想着把所有数字读取出来再放入数组中做比较,

 * 只能一个一个拿出来做比较;</p>

 * 我的思路:

 * <p>先拿出前5个数字,并放入长度为5的数组,然后排序,让最小的数字和以后从文件中读取出来的数字做比较,

 * 只要大于数组中最小的,就把读取出来的数字替换到数组里,这样及可以得到最终的最大的5个数字</p>

 *

 * <p>模拟输出输入的数字:</p>

 * @author King

 *

 */

public class Test1 {

    public static void main(String[] args) {

        readWord("F:/3.txt");

    }

    /**

     * 获取输出流

     *

     * @param namepath

     * @return

     */

    public static OutputStream getOutStream(String namepath) {

        try {

            return new FileOutputStream(new File(namepath));

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return null;

    }

    /**

     * 写入

     *

     * @param namepath

     * @return

     */

    public static void writeWord(String namepath) {

        OutputStream out = getOutStream(namepath);

        try {
            java.util.Random r = new java.util.Random();//此处没有用随机数

           //写入文件,模拟N多数字的环境

            for (int i = 1; i < 15; i++) {

                //System.out.println("radom=" + r.nextInt(10));

                System.out.println("i=" + i);

                out.write(i);

            }

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    /**

     * 获取输入流

     *

     * @param namepath

     * @return

     */

    public static InputStream getInStream(String namepath) {

        try {

            return new FileInputStream(new File(namepath));

        } catch (FileNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return null;

    }

    /**

     * 读取

     *

     * @param namepath

     * @return

     */

    public static void readWord(String namepath) {

        int[] s1 = new int[5] ;//用于存放5个数字的数组

        writeWord(namepath);//模拟环境,写入N多数字

        InputStream in = getInStream(namepath);//读取数字

        try {

            /**

             * 要从这个文件读取很多数字,不知道多少,所以不能存入数组 最后要找到最大的5个

             */

            int b = 0;//用于接收读取出来的数字

            int i = 0;//用于循环自增;   在此我们暂时不考虑long型数据

            while ((b = in.read()) != -1) {

                //把前5个数字存入数组中

                if (i < 5) {

                    s1[i] = b;

                }

                //用后面的数字和前面的5个做比较

                if (i >= 5) {

                    

                    Arrays.sort(s1) ;    //做比较之前先进行升序操作

                    

                    if (b > s1[0]) {         //和数组中最小的数字作比较

                        s1[0] = b;             //最关键的一步:大于数组中最小的及把他替换掉

                    }

                }

                i++;

            }


        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        for (int i = 0; i < s1.length; i++) {

            System.out.println("s1["+i+"]="+s1[i]);

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序 取最大值
相关文章推荐