Почему этот сборник не создан? [Дубликат]

В приведенных выше ответах не обсуждается назначение среза:

>>> r=[1,2,3,4]
>>> r[1:1]
[]
>>> r[1:1]=[9,8]
>>> r
[1, 9, 8, 2, 3, 4]
>>> r[1:1]=['blah']
>>> r
[1, 'blah', 9, 8, 2, 3, 4]

Это также может прояснить разницу между нарезкой и индексированием.

4
задан Armando Moncada 18 July 2012 в 03:45
поделиться

5 ответов

Для первого вопроса проблема довольно проста. oneName является String, а myCelebrityList представляет собой набор из CelebrityNamesFile - это означает, что вы можете добавлять объекты в коллекцию типа CelebrityNamesFile.

Для второй проблемы, ваша проблема в том, что класс CelebrityNamesFile не реализует интерфейс Comparable. Для сортировки требуется, чтобы заказ выполнялся для типа элемента списка, например. путем реализации Comparable для класса или предоставления Comparator sort.

12
ответ дан Tim Bender 23 August 2018 в 15:47
поделиться

Сбор myCelebrityList имеет тип CelebrityNamesFile, а это значит, что он может принимать только экземпляры этого класса. Вам нужно создать экземпляр CelebrityNamesFile и добавить его в коллекцию. Collections не будут принимать вашу коллекцию, потому что класс CelebrityNamesFile не реализует интерфейс Comparator. Вам нужно передать экземпляр компаратора в Collections.sort() в качестве второго параметра.

1
ответ дан devang 23 August 2018 в 15:47
поделиться

Для первой проблемы вы пытаетесь добавить String в экземпляр List<CelebrityNamesFile>. Вы можете использовать String для создания экземпляра CelebrityNamesFile и добавить этот экземпляр в ваш список:

CelebrityNamesFile celebrityNamesFile = new CelebrityNamesFile();
celebrityNamesFile.lastName = oneName;
myCelebrityList.add( celebrityNamesFile );

Для второй проблемы попробуйте

Collections.sort(myCelebrityList, new CompareLastName());

Как точки @alyu, класс CelebrityNamesFile должен реализовать интерфейс Comparable для работы с кодом, который вы публикуете, но вы также можете добавить экземпляр Comparator<CelebrityNamesFile> (и у вас уже есть класс CompareLastName, который его реализует).

Подробнее об этом:

2
ответ дан Luiggi Mendoza 23 August 2018 в 15:47
поделиться
  1. Вы пытаетесь добавить String (объект oneName) в список CelebrityNamesFile s. Вам нужно каким-то образом создать CelebrityNamesFile из этого String.
  2. Collections.sort() работает только с объектами Comparable, если вы явно не передаете компаратор. Попробуйте это вместо: Collections.sort(myCelebrityList, new CelebrityNamesFile.CompareLastName());
1
ответ дан millimoose 23 August 2018 в 15:47
поделиться

Comparator, реализованный в классе CompareLastName, может быть помещен вне класса SortNames или, по крайней мере, вне класса CelebrityNamesFile. У меня была такая же проблема, пока я не поместил класс, который реализует мой Компаратор вне моего класса объектов. После того, как я это сделал, программа отлично работала. Вот пример моего кода с комментариями, если он помогает.

// Comparator interface for my Word Class.
public interface Comparator<Word>
{ 
    int compare(Word first, Word second); 
}

// Word Class, which is my object.
public class Word
{
    private String word;
    public Word(String input)  { word = input; }
    public String get()  { return word; }
    public int wordSize()  { return word.length(); }
}

// Comparator implementation is separate from my Word Class.
public class WordComparator implements Comparator<Word>
{
    public int compare(Word first, Word second)
    {
        if (first.wordSize() < second.wordSize())  { return -1; }
        else if (first.wordSize() > second.wordSize())  { return 1; }
        else  { return first.get().compareTo(second.get()); }
    }
}

// Now run the program to ensure the Word Class objects and the WordComparator
// Class are implemented correctly.
public class WordComparatorDemo
{
    public static void main(String[] args) throws FileNotFoundException
    {
        ArrayList<Word> list = new ArrayList<Word>();
        JFileChooser find = new JFileChooser();
        Scanner read = null;
        if(find.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        {
            File selectedFile = find.getSelectedFile();
            read = new Scanner(selectedFile);
            try
            {
                list = inputData(read);
                // Here's the sort implementing the WordComparator.
                Collections.sort(list, new WordComparator());
            }
            finally  { read.close(); }
        }
    }
    public static ArrayList<Word> inputData(Scanner in)
    {
        ArrayList<Word> list = new ArrayList<Word>();
        in.useDelimiter("[^A-Za-z]+");
        while(in.hasNext())
        {
            String word = in.next();
            Word temp = new Word(word);
            list.add(temp);
        }
        return list;
    }
}

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

1
ответ дан Mr. Pickles 23 August 2018 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: