【问题标题】:Issue in sorting arraylist排序数组列表中的问题
【发布时间】:2019-08-16 20:32:10
【问题描述】:

我是第一次使用 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

请告知我哪里出错了

【问题讨论】:

  • Collections.sort 方法按自然顺序升序对集合进行排序。 Collections.sort 方法的 javadoc 中的详细信息。对于字符串,自然顺序是描述中的Observed Output。获取Expected Output 使用Integer.valueOf(hereComesTheStringToConvert) 方法将字符串转换为整数

标签: java regex string algorithm arraylist


【解决方案1】:

这是因为您排序的是 Strings 而不是 Integers。因为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]));

【讨论】:

  • 感谢您的回复。请告知“10”如何小于“2”。同样,在输入“1”时,它是数组列表中的第一个元素,它是如何为“1”而不是“2”工作的。
  • @Geek 这是因为您正在查看第一个字符。在字母表中,“1”在“2”之前。与“abc”相同将“小于”“b”。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2017-03-07
    • 2019-04-07
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多