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


Автор: Корнелиус 14.12.2005, 17:26
Код
class A{
       next  A;
// коструктор
// методы
      do(a){if next!=NULL next.do{a,a}}
      do(a,a ){if next!=NULL next.do{a,a,a}}
      do( a,a,a ){...}
}


Нужна вот такая кострукция. То есть просто список из пяти (например) элементов типа A. Можно ли такой список создать в конструкторе этого класса?

Автор: LSD 14.12.2005, 17:33
Код
public class A
{
  private A next;

  public A(int count)
  {
    if(count > 0)
      next = new A(count - 1);
  }
}

Добавлено @ 17:34
Только не забывай, что стек не резиновый.

Автор: Корнелиус 14.12.2005, 20:49
А возможно ли на основе такой конструкции реализовать FileFilter и передавать его в fille.list(FileFilter)? Мне нужно поиск огранизовать по различным характеристикам...

Автор: LSD 14.12.2005, 20:58
Цитата
А возможно ли на основе такой конструкции реализовать FileFilter и передавать его в fille.list(FileFilter)?

Не понимаю зачем, FileFilter-у нужно создавать цепочку из объектов.

Автор: Корнелиус 14.12.2005, 21:06
А у меня пять процедур поиска - соответственно полям на форме"поиск файлов"... Честно говоря не хочется создавать 5 классов фильтров с различными accept(File dir, String name)...

Автор: LSD 14.12.2005, 21:34
Зачем с различными, вот например фильтр который принимает список расширений и по ним фильтрует:
Код
public class ListFileFilter implements FileFilter
{
  private String[] extensions;
  
  public ListFileFilter(String[] extensions)
  {
    this.extensions = extensions;
  }
  
  public boolean accept(File pathname)
  {
    if(pathname.isDirectory())
      return true;
    String fileName = pathname.getName();
    for(int i = 0; i < extensions.length; i++)
    {
      if(fileName.endsWith(extensions[i]))
        return true;
    }
    return false;
  }
}

Автор: Корнелиус 14.12.2005, 22:13
Прошу прощения, мне нужен FilenameFilter - мне в результате просто список имен файлов нужен. Но не суть. Вышеуказанный фильтр отбирает файлы по расширению. Еще мне нужно, например, по ReadOnly - это ж новый класс фильтра , или я не понимаю чего-то?
Хочется, чтобы поиск выглядел так:

Код
class A{    
       next  A;    
// коструктор    
// методы    
     search(a){if next!=NULL next.do{a,a}}    
     search(a,a ){if next!=NULL next.do{a,a,a}}    
     search( a,a,a ){...}
}

где search(a) - фильтрeует по дате создания(считывает ее на форме)
search(a,a ) - по расширению файла
search(a, a, a ) - например по началу и окончанию файла

Автор: batigoal 14.12.2005, 23:37
Лучше, наверное, в таком виде:
Код

search(int parameterNumber, int parameterValue)

, где первый параметр определяет тип поиска, а второй - значение.

Автор: Корнелиус 15.12.2005, 15:27
Сделал так:
Код
public class Decorator {
  Decorator next;
  public Decorator(int count){
    if (count>0)
        {
           next=new Decorator(count-1);
    }
    else next=null;
 }
String [] search(TimeFileFilter tF){

  File cd = new File(Frame1.path);
  String [] s = cd.list(tF);
  if (next!=null) return next.search(Frame1.readOnlyF);
  else return s;
}
String [] search(ReadOnlyFileFilter roF){
  File cd = new File(Frame1.path);
  String [] s = cd.list(roF);
  if (next!=null) next.search(Frame1.readOnlyF);
  return s;
}
}


Вызываю так (решил проверить только первый метод search для начала):
Код
 Decorator d=new Decorator(1);
    String [] s=d.search(timeF); 

И прихожу к выводу что next в
Код
 if (next!=null) return next.search(Frame1.readOnlyF); 


уже в null не указывает, соответственно условие не работает. А почему?

Автор: Корнелиус 15.12.2005, 16:14
)) Упс. Надо ж вызывать
Код
 Decorator = new Decorator(0); 

Так, вроде, жужжит. Спасибо за участие

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