Проблема в сортировке arraylist - PullRequest
0 голосов
/ 26 марта 2019

Я работаю над ArrayList впервые, поэтому ожидайте некоторой помощи в его понимании.

Я принимаю некоторые пользовательские данные и сохраняю их в ArrayList.

Входные данные состоят из одной и двух цифрчисло.

Если однозначное число равно 1 (при любом индексе), Arraylist отсортирован правильно.

Если однозначное число отличается от 1, однозначное число отсутствует впорядок сортировки (все остальные числа отсортированы).

Пожалуйста, игнорируйте первую строку ввода, поскольку ее назначение - это нечто другое, и логика для этого еще не написана.

Вторая строкавходными данными являются числа, которые должны быть сохранены в массиве и отсортированы.

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 ]

1 голос
/ 26 марта 2019

Это потому, что вы сортируете 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]));
0 голосов
/ 26 марта 2019

Вы пытаетесь отсортировать строки вместо целых чисел, поэтому, если у нас есть «9» и «10» в качестве строк, он будет отсортирован как 10, а затем 9. Тогда как, если мы отсортируем его как целые числа, мы получим вывод как 9затем 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...