2013-05-23 4 views
0

Я пытаюсь создать экземпляр массива String с элементами из файла «cool.txt», и то же самое для массива warm, за исключением текстового файла «warm.txt», программа работает в какой мере многие элементы массива помечены как нулевые enter image description hereСоздание экземпляра двух массивов из двух текстовых файлов

Это частично верно, поскольку в массиве есть все правильные элементы; только миллионы нуль после

вот мой код

int count2=0; 
    int count3=0; 
    String[] filename ={"Cool.txt","Warm.txt"}; 
    String[] cool =new String[30]; 
    String[] warm =new String [3000]; 
    String[][] arrays = new String [][]{cool,warm}; 
    BufferedReader fr; 



    try 
    { 
    for(int i=0; i<2; i++) 
    { 
    fr = new BufferedReader(new FileReader(filename[i])); 
    String line = fr.readLine(); 

    while (line != null) 
      { 

       if (i<=0) 
       {arrays[i][count2]=line; 
       System.out.println("COOL");  
       count2++;} 

     if(i>=1) 
     {arrays[i][count3]=line; 
     System.out.println("WARM");  
     count3++;} 

     line = fr.readLine(); 

} 
    fr.close(); 


    } 

    System.out.println(Arrays.asList(warm)); 
    System.out.println(Arrays.asList(cool)); 
    } 




      catch(Exception F){ 
     System.out.println("NUL"); 
    } 

} 

ответ

2

Когда вы создаете массив объектов в Java, они инициализируются значением по умолчанию. Для целых чисел это 0. Для объектов, таких как String, это нулевая ссылка. Поскольку ваш массив состоит из 30000 элементов, он будет содержать элементы из вашего файла (около 5), а остальные не будут инициализированы (null).

Если вы хотите использовать список объектов с переменным размером, вы можете найти ArrayLists или другие типы списков. Если вы должны были заменить следующие строки:

String[] cool =new String[30]; 
String[] warm =new String [3000]; 

и

System.out.println(Arrays.asList(warm)); 
System.out.println(Arrays.asList(cool)); 

с

List<String> cool = new ArrayList<String>(); 
List<String> warm = new ArrayList<String>(); 

и

System.out.println(warm); 
System.out.println(cool); 

Вы бы получить правильный результат. Вы уже использовали списки в некотором смысле: вызов метода Arrays.asList преобразует аргумент в объект типа List.

+0

О, я очень благодарю вас. Отлично работает – nmu

+0

Нет проблем! Если вы используете Java 7, вам даже не нужно повторять «String» в 'new ArrayList ();'. Вы можете просто написать: «Список cool = new ArrayList <>();' и Java узнает, какой тип он должен быть. Это называется алмазным оператором. Полезно сэкономить время, набрав меньше! – RaptorDotCpp

+0

Да, я инфакт, я просто использовал инструкцию печати массива вручную и оставил массивы как тип String – nmu

0

В конце функции вы в конечном итоге их преобразования в list объектов. Если вы просто используете List, чтобы начать с вас, у вас не будет «миллионов» нулей. Причина, по которой вы получаете нулевые значения, заключается в том, что вы можете распределять массив только один раз, поэтому все слоты по умолчанию равны null.

Смежные вопросы