黑马程序员技术交流社区

标题: 一道关于排序的题,求大神给出简便方法。 [打印本页]

作者: LoneRan9er    时间: 2016-10-3 16:24
标题: 一道关于排序的题,求大神给出简便方法。
将用户在控制台上输入5个数字,按照降序存入到“D:\\number.txt”中
自己写的太复杂了,有没有大神给个简单方法啊。
[Java] 纯文本查看 复制代码
package base3;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/*
* 3.将用户在控制台上输入5个数字,按照降序存入到“D:\\number.txt”中
*/
public class Demo {
        public static void main(String[] args) throws IOException {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入五个数字");
                int i = 0;
                ArrayList<Integer> list = new ArrayList<>();
                while(i<5){
                        int next = sc.nextInt();
                        list.add(next);
                        i++;
                }
                System.out.println(list);
                //将集合变成数组
                Object[] array = list.toArray();
                //将数组变成升序排列
                Arrays.sort(array);
                //将数组变成字符串
                String string = Arrays.toString(array);
                //将字符串变成字符串缓冲类
                StringBuffer sb = new StringBuffer(string);
                //将字符串翻转
                StringBuffer re = sb.reverse();
                //去除两头的中括号
                String substring = re.substring(1, re.length()-1);
                //打印数组
                System.out.println(substring);
                //将数组写入到文本中
                FileWriter fw= new FileWriter(new File("d:\\number.txt"));
                fw.write(substring);
                fw.close();
        }
}


作者: 梦想工程师    时间: 2016-10-3 18:47
新手路过
public class Demo {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入五个数字");
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; i++) {
                        arr[i] = sc.nextInt();
                }
        //将数组变成升序排列
        Arrays.sort(arr);
        //将数组写入到文本中
        FileWriter fw= new FileWriter(new File("d:\\number.txt"));
        for (int i = arr.length - 1; i >= 0 ; i--) {
                fw.write(String.valueOf(arr[i]));
                if(i != 0) {
                        fw.write(",");
                }
                }
        fw.close();
    }
}
感觉没变多简单
不过固定长度为什么还用集合不用数组呢(然后又转换为数组),而且你的这样的结果是数组和逗号之间有空格?
或者你用一下链式看上去少点变量,而且数组有重新toString的方法啊,为什么要那么复杂,你集合都用了Integer做泛型了
StringBuffer sb = new StringBuffer(array.toString()).reverse();
String str = sb.substring(1, sb.length()-1);
作者: 李孝志    时间: 2016-10-3 22:12
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/*
* 3.将用户在控制台上输入5个数字,按照降序存入到“D:\\number.txt”中
*/
public class Demo {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入五个数字");  
        ArrayList<Integer> list = new ArrayList<>();
                for(int i = 0;i < 5;i++){
                         list.add(new Scanner(System.in).nextInt());
                }
        System.out.println(list);
        //将集合变成数组
        Object[] array = list.toArray();
        //将数组变成升序排列
        Arrays.sort(array);
        //将数组变成字符串
        String string = Arrays.toString(array);
        //将字符串变成字符串缓冲类
        StringBuffer sb = new StringBuffer(string);
        //将字符串翻转
        StringBuffer re = sb.reverse();
        //去除两头的中括号
        String substring = re.substring(1, re.length()-1);
        //打印数组
        System.out.println(substring);
        //将数组写入到文本中
        FileWriter fw= new FileWriter(new File("d:\\number.txt"));
        fw.write(substring);
        fw.close();
    }
}
作者: Daveweil    时间: 2016-10-3 23:51
不是有一个集合工具类么?另外,你可以用tree集合做,都是排好序的

作者: 13902480061    时间: 2016-10-4 00:17
用treeset就可以升序,然后变成字符串反转写出。貌似只能这样了。
作者: 小泥人    时间: 2016-10-4 13:43
如果有重复元素TreeSet估计就不行了吧。。。菜鸟的疑问
作者: LoneRan9er    时间: 2016-10-5 15:52
如果考试的时候可以使用TreeSet吗?   默默的问一句
作者: 谢磊    时间: 2016-10-5 17:38
Scanner sc = new Scanner(System.in);                 FileWriter fos = new FileWriter("number.txt");                 int[] arr = new int[5];                 for (int i = 0; i < arr.length; i++) {                         arr[i] = sc.nextInt();                 }                 Arrays.sort(arr);                 for (int i = arr.length - 1; i >= 0 ; i--) {                         fos.write(arr[i] + " ");                 }                 fos.close();
作者: 谢磊    时间: 2016-10-5 17:40
Scanner sc = new Scanner(System.in);
                FileWriter fos = new FileWriter("number.txt");
                int[] arr = new int[5];
                for (int i = 0; i < arr.length; i++) {
                        arr[i] = sc.nextInt();
                }
                Arrays.sort(arr);
                for (int i = arr.length - 1; i >= 0 ; i--) {
                        fos.write(arr[i] + " ");
                }
                fos.close();
作者: 谢磊    时间: 2016-10-5 17:43
讲道理,我这应该是最简单明了的了吧,只有路径那里我没写根目录而已, 给一分呗~
作者: Dreamkele    时间: 2016-10-5 21:53
[Java] 纯文本查看 复制代码
package com.heima.collection;

import java.io.FileOutputStream;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Test09 {
        public static void main(String[] args) throws Exception {
                List<Integer> list = new LinkedList<Integer>();
                //集合长度小于5就添加
                while (list.size()<5) {
                        list.add(new Scanner(System.in).nextInt());
                }
                //排序  逆序
                Collections.sort(list);
                Collections.reverse(list);
                //创建输出流
                FileOutputStream fos = new FileOutputStream("number.txt");
                for (Integer integer : list) {
                        fos.write(String.valueOf(integer).getBytes());
                        fos.write("\r\n".getBytes());
                }
                fos.close();
        }
}


楼主可以参考下我的思路~
作者: 暮雨微凉    时间: 2016-10-5 22:14
用TreeSet集合实现降序也行,我觉得会简单点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2