在对arraylist排序时出现问题

时间:2019-03-26 12:42:10

标签: java sorting arraylist

我第一次在ArrayList上工作,所以希望对理解它有所帮助。

我正在接受用户输入并将其存储在ArrayList中。

输入由一位数字和两位数字组成。

如果单位数字是1(在任何索引处),则Arraylist会正确排序。

如果一位数字不是1,则该数字不是按排序顺序(所有其他数字都已排序)。

请忽略输入的第一行,因为它的目的是另外一回事,并且该逻辑尚待编写。

输入的第二行是要存储在arraylist中并进行排序的数字。

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

public class FindTheNo {

public static void main(String[] args) throws Exception {

    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);

    String line;

    String s = br.readLine();
    String[] numbers = s.split(" ");

    while((line = br.readLine()) != null){

        String arr = line;
        String[] nos = arr.split(" ");

        ArrayList<String> al = new ArrayList<String>();

        for(int i = 0; i < nos.length; i++) 
            al.add(nos[i]);

        Collections.sort(al);

        for(String s1: al)
        System.out.print(s1 +" ");

        System.out.println();
    //  System.out.println(al.get(6));
    }

}

}

输入: 1 5 9 10 58 63 47 25 63 9

观察到的输出: 10 25 47 58 63 63 9

预期输出: 9 10 25 47 58 63 63

请告知我要去哪里

2 个答案:

答案 0 :(得分:1)

这是因为您正在排序String,而不是Integer。由于String "10"“小于” "2"。您需要更改此内容:

    ArrayList<String> al = new ArrayList<String>();

    for(int i = 0; i < nos.length; i++) 
        al.add(nos[i]);

进入:

    ArrayList<Integer> al = new ArrayList<Integer>();

    for(int i = 0; i < nos.length; i++) 
        al.add(Integer.valueOf(nos[i]));

答案 1 :(得分:0)

您正在尝试对字符串进行排序,而不是对整数进行排序,因此,如果我们将字符串“ 9”和“ 10”排序,则将其排序为10,后跟9。而如果将其排序为整数,则将收到输出为9其次是10