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


Автор: ayurevi4 15.8.2010, 02:57
Проблевка в length. Когда вычисления нужной длины массива и устанавливаю в  length то там почему то пусто. Вот. Подскажите как сделать

Код

import java.io.File;

class  SortedDirList{
    private int length;
    private String array[] = new String[length];
    
    public SortedDirList(String pach) {
        // TODO Auto-generated constructor stub
        File dir = new File(pach);
        File[] fls = dir.listFiles();
        length = fls.length;
        if (fls != null)
            for (int i = 0; i < fls.length; i++){
             array[i]=fls[i].getName();
            }                
    }
    public void list(){
        for(int i=0; i<length; i++){
            System.out.println(array[i]);
        }
    }
    public void list(String fileType){
        
    }
    public void size(){
        
    }
}
public class Dir {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SortedDirList xxx = new  SortedDirList("C:\\");
        xxx.list();
    }

}


Автор: dorogoyIV 15.8.2010, 09:39
Код

    private int length;
    private String array[] = new String[length];

переменная length еще не инициализирована, а ты уже хочешь длину массива указать

Автор: ayurevi4 15.8.2010, 12:43
а как же вот это length = fls.length;.
пройдись дебагером. когда доходим до места где начинаю пихать из одного массива в другой переменная length имеет значение. а массива с тем же количеством элементов нету.

Автор: dorogoyIV 15.8.2010, 12:56
Код

import java.io.File;

class  SortedDirList
{
 private int length; // length = 0 !!!
 private String array []; // = new String [length];

 public SortedDirList(String pach)
 {
  File dir = new File(pach);
  File [] fls = dir.listFiles();
  length = fls.length;

  array = new String [length]; // !!! здесь можно уже задать длину

  if (fls != null)
   for (int i = 0; i < fls.length; i++)
    array [i] = fls [i].getName();
 }

 public void list()
 {
  for(int i = 0; i < length; i++)
   System.out.println(array [i]);
 }
}

public class Dir
{
 public static void main(String[] args)
 {
  SortedDirList xxx = new  SortedDirList("C:\\");
  xxx.list();
 }
}

Автор: ayurevi4 15.8.2010, 13:00
ооооо спасибо. то что нада

Автор: Skipy 16.8.2010, 10:24
Цитата(ayurevi4 @ 15.8.2010,  12:43)
а как же вот это length = fls.length;.
пройдись дебагером. когда доходим до места где начинаю пихать из одного массива в другой переменная length имеет значение. а массива с тем же количеством элементов нету.

Вот-вот. Пройдитесь дебаггером. Хорошим. Который покажет, что сначала создаются переменные экземпляра - в том числе и массив с длиной, которую в этот момент имеет переменная lеngth, т.е. 0, - а потом уже только вызывается конструктор.

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