Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > сортировка без повторений


Автор: spbsmile 10.7.2011, 19:41
Здравствуйте!

как в сортировке сделать так , чтобы в 
output file  не было повторяющихся элементов?? 
метод LinkedHashSet не предлагатьsmile

программа:
Код

class SortString 
{
  static String arr[] = 
    {"ddd", "sss", "aaa", "ggg", "aaa", "bbb",    
     "good", "ccc",  };
  public static void main(String args[]) 
 
  { 
    for (int j = 0; j < arr.length; j++) 
    {
    
      for (int i = j + 1; i < arr.length; i++) 
      { 
        if (arr[i].compareTo(arr[j]) < 0) 
        { 
          String t = arr[j];
          arr[j] = arr[i];
          arr[i] = t;
        } 
      }  
     
      System.out.println(arr[j]);
    } 
  } 
}



может быть как-нибудь так?
Код

 for (int j = 0; j < arr.length; j++);
     for (int b = j + 1; b < arr.length +1; b++)
      if  ( arr[j].equals(arr[b]) )
     {
       
      delete arr[b];
    }


как реализовать delete в java?
 подскажите пожалуйста smile 

Автор: NoliX 10.7.2011, 23:29
Цитата(spbsmile @  10.7.2011,  19:41 Найти цитируемый пост)
output file  не было повторяющихся элементов?? 

Если я правильно понял, то задача заключается именно в том, чтобы в выходном файле не было повторяющихся элементов.

После сортировки все повторяющиеся элементы будут идти подряд. Это означает, что при выводе в файл достаточно проверять, что текущий выводимый элемент не равен предыдущему.

Код

String prevItem = null;
for (final String item : arr){
    if (!item.equals(prevItem)){
        System.out.println(item);    
    }
    prevItem = item;
}

Автор: spbsmile 11.7.2011, 06:58
спасибо!)

Автор: danilych 11.7.2011, 08:30
Цитата

Если я правильно понял, то задача заключается именно в том, чтобы в выходном файле не было повторяющихся элементов.

После сортировки все повторяющиеся элементы будут идти подряд. Это означает, что при выводе в файл достаточно проверять, что текущий выводимый элемент не равен предыдущему.


это можно делать при сортировке массива

Автор: LSD 11.7.2011, 14:41
TreeSet - решение из коробки smile 

Автор: NoliX 11.7.2011, 18:10
Цитата(danilych @ 11.7.2011,  08:30)
Цитата

Если я правильно понял, то задача заключается именно в том, чтобы в выходном файле не было повторяющихся элементов.

После сортировки все повторяющиеся элементы будут идти подряд. Это означает, что при выводе в файл достаточно проверять, что текущий выводимый элемент не равен предыдущему.


это можно делать при сортировке массива

Можно, но идеологически неправильно. Во-первых потому, что смешивается логика сортировки и поиска повторений. Во-вторых потому, что если выкидывать элемент из массива, то его нужно будет заменять на null а затем при выводе не забыть игнорировать null. Если изменять размер массива после кадого найденного повторения, то вычислительная сложность становится O(n^3) из-за копирования значений.

Автор: spbsmile 11.7.2011, 23:54
еше раз здравствуйте!)
 
 я не понимаю смысл данных слов.
 Имя входного и путь к выходным файлам задается в виде двух параметров командной строки.
 что обозначают данные слова?

у каждого входного файла есть имя?
что за два параметра?
в моем случае является ли массив входным файлом? 
 smile 

Автор: spbsmile 12.7.2011, 09:47
I'll take a shot at explaining the words you highlighted: 
Цитата


The name of the input and the path to the output files specified(it is set/given) in the form of two command line parameters.


This means that when the Java program is run from the command line, 2 command line parameters are specified, the name of the input file and the path and name of the output file. For example: 

C> java myProgram NameOfInputFile c:/path/NameOfOutputFile 

The words you posted leave some room for interpretation, but that's the best I can do.

этот ответ был получен на англояз. форуме.
я немного понял, что от меня хотят , но не до конца.
поясните пожалуйста  smile 

Автор: LSD 12.7.2011, 09:49
Если данных мало и они помещаются в память, используй TreeSet и не мучайся.
Код

String[] arr = {"ddd", "sss", "aaa", "ggg", "aaa", "bbb", "good", "ccc"};
SortedSet<String> sortedStrings = new TreeSet<String>(Arrays.asList(arr));
System.out.println(sortedStrings);

Автор: spbsmile 12.7.2011, 10:10
спасибо LSD!
я не мучаюсь)
Цитата

C> java myProgram NameOfInputFile c:/path/NameOfOutputFile

что это значит?))

как это связать с моей программой?

Автор: LSD 12.7.2011, 10:34
Цитата(spbsmile @  12.7.2011,  11:10 Найти цитируемый пост)
как это связать с моей программой? 

А зачем?

Автор: spbsmile 12.7.2011, 10:43
это часть одного из двух заданий, которые дают шанс попасть 
в java school.)

Добавлено через 5 минут и 27 секунд
Цитата


The args argument that the main method gets contains the command line parameters. For example: 
Код



public class Example {  
    public static void main(String[] args) {  
        // Print out the contents of args  
        for (int i = 0; i < args.length; ++i) {  
            System.out.println("args[" + i + "] = " + args[i]);  
        }  
    }  
}  


C:\Temp>java Example hello petr 
args[0] = hello 
args[1] = petr 


все равно не понимаю)

Имя входного и путь к выходным файлам задается в виде двух параметров командной строки.
входной файл у меня массив. мне надо как-то массив таким способом ввести в программу?

Автор: LSD 12.7.2011, 10:55
Входной файл это не массив, это файл. В нем могут храниться какие-то данные которые можно прочитать из него и положить в массив. Как это сделать зависит от формата данных.

Автор: spbsmile 12.7.2011, 11:02
спасибо!)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)