Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Exception in thread "main", итераторы и приведение типов кажись 
:(
    Опции темы
SectoR
Дата 26.10.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



Есть класс PrivateSectorPersons с методом ViewPerson:
Код

      public static void ViewPerson(PrivateSectorPersons pers)
          {
              System.out.println(pers.surname+" "+pers.name+" "+pers.secondname);
          } // ViewPerson


Есть Main класс
Код

      public class Main {
       
          public static PrivateSectorPersons parseRow(Cell[] row)
          {
              // Промежуточные переменные:
       
              // Проголосовавший:
              // код ЛС, флаг ответственности, ФИО, дата рождения, пол
              int ls_code;
              boolean otv;
              String name, surname, secondname;
              java.util.Date birthday;
              char sex;
       
              // др. переменные...
       
       
              // Собственно парсим строку, записывая значения ячеек в промежуточные переменные:
       
              // Проголосовавший:
              // код ЛС
              if (row[1].getType() == CellType.NUMBER)
              {
                  NumberCell cell = (NumberCell) row[1];
                  ls_code = (int)cell.getValue();
              }
              else return null;
              // флаг ответственности
              if (row[2].getType() == CellType.BOOLEAN)
              {
                  BooleanCell cell = (BooleanCell) row[2];
                  otv = cell.getValue();
              }
              else return null;
              // фамилия
              if (row[3].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[3];
                name = cell.getString();
              }
              else return null;
              // имя
              if (row[4].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[4];
                surname = cell.getString();
              }
              else return null;
              // отчество
              if (row[5].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[5];
                secondname = cell.getString();
              }
              else return null;
              // дата рождения
              if (row[6].getType() == CellType.DATE)
              {
                DateCell cell = (DateCell) row[6];
                birthday = cell.getDate();
              }
              else return null;
              // пол
              if (row[14].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[14];
                sex = (cell.getString().toCharArray())[0];
              }
              else return null;
       
              // остальное...
       
       
              // Вызываем конструктор, создающий объект
              return new exceltest.PrivateSectorPersons(ls_code, otv, surname, name, secondname, birthday, sex,
              district, sattlement, street, home, flat,
              country, region, district_, sattlement_,
              doc_type, series, number, issue_place, issued, issue_date);
       
          } // parseRow
       
       
          /**
          * @param args the command line arguments
          */
          public static void main(String[] args) {
       
              try {
       
                  // Открываем Excel-книгу для работы:
                  Workbook workbook = Workbook.getWorkbook(new File("e:\\Projects\\JDBC, Excel\\test.xls"));
       
                  int SheetsNumber = workbook.getNumberOfSheets();
                  System.out.println("Sheets Count: " + SheetsNumber);
       
                  // Ссылка на лист
                  Sheet sheet;
       
                  // Количество столбцов и строк в листе
                  int columns, rows;
       
                  // Список персон из частного сектора
                  List persons = new ArrayList();
       
       
                      // Открываем лист и
                      // считываем количество стобцов и строк в нем
                      sheet = workbook.getSheet(0);
                      columns = sheet.getColumns();
                      rows = sheet.getRows();
       
                      // Выводим информацию
                      System.out.println("Sheet Number: "+ 0);
                      System.out.println("Columns: " + columns + " Rows: " + rows);
       
                      // Ячейки строки
                      Cell[] row;
       
                      // Персона из частного сектора
                      PrivateSectorPersons pers;
       
                      // Считываем ячейки в массив
                      for(int k=0; k<rows; k++)
                      {
                          row = sheet.getRow(k);
       
                          persons.add(parseRow(row));
                      }
       
                      // Просмотр коллекции с помощью итератора
                      Iterator i = persons.iterator();
                      while(i.hasNext())
                      {
                          pers = (PrivateSectorPersons)i.next();
                          PrivateSectorPersons.ViewPerson(pers);
                      }
       
                      // Просмотр коллекции
                      //for(int i=0; i<persons.size(); i++)
                      //{
                      //    PrivateSectorPersons.ViewPerson((PrivateSectorPersons) persons.get(0));
                      //}
       
       
       
                  // Закрываем Excel-книгу
                  workbook.close();
       
              } catch (IOException ex) {
       
                  Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
              } catch (BiffException ex) {
       
                  Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
              }
       
              System.out.println("The End.");
          } // main method
      } // Main class


не удается просмотреть данные ни с помощью for ни с помощью Iterator((
Код

      // Просмотр коллекции с помощью итератора
                      Iterator i = persons.iterator();
                      while(i.hasNext())
                      {
                          pers = (PrivateSectorPersons)i.next();
                          PrivateSectorPersons.ViewPerson(pers);
                      }
       
                      // Просмотр коллекции
                      //for(int i=0; i<persons.size(); i++)
                      //{
                      //    PrivateSectorPersons.ViewPerson((PrivateSectorPersons) persons.get(0));
                      //}


Компилятор выплевывает следующее:
Цитата


run:
Sheets Count: 13
Sheet Number: 0
Columns: 35 Rows: 1500
Exception in thread "main" java.lang.NullPointerException
at exceltest.PrivateSectorPersons.ViewPerson(PrivateSectorPersons.java:81)
at exceltest.Main.main(Main.java:277)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)


81 строка в первом листинге:
System.out.println(pers.surname+" "+pers.name+" "+pers.secondname);

277 вызов ViewPerson
PrivateSectorPersons.ViewPerson(pers);

Подскажите как сделать правильно? 
PM   Вверх
jk1
Дата 26.10.2010, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



У вас срабатывает вот эта ветка второго листинга
Код

 else return null;

поэтому в коллекцию на каком-то из этапов попадает null. Итератор все нормально проходит, просто однажды возвращает null, который затем попадает вот сюда
Код

public static void ViewPerson(PrivateSectorPersons pers)
          {
              System.out.println(pers.surname+" "+pers.name+" "+pers.secondname);
          }

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

Подскажите как сделать правильно? 

Исправлять вот эту логику
Код

if (row[1].getType() == CellType.NUMBER)
              {
                  NumberCell cell = (NumberCell) row[1];
                  ls_code = (int)cell.getValue();
              }
              else return null;
              // флаг ответственности
              if (row[2].getType() == CellType.BOOLEAN)
              {
                  BooleanCell cell = (BooleanCell) row[2];
                  otv = cell.getValue();
              }
              else return null;
              // фамилия
              if (row[3].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[3];
                name = cell.getString();
              }
              else return null;
              // имя
              if (row[4].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[4];
                surname = cell.getString();
              }
              else return null;
              // отчество
              if (row[5].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[5];
                secondname = cell.getString();
              }
              else return null;
              // дата рождения
              if (row[6].getType() == CellType.DATE)
              {
                DateCell cell = (DateCell) row[6];
                birthday = cell.getDate();
              }
              else return null;
              // пол
              if (row[14].getType() == CellType.LABEL)
              {
                LabelCell cell = (LabelCell) row[14];
                sex = (cell.getString().toCharArray())[0];
              }
              else return null;

Я особенностей вашей задачи не знаю, но возвращение null по поводу и без повода выглядит довольно странно.

Это сообщение отредактировал(а) jk1 - 26.10.2010, 10:32


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
SectoR
Дата 27.10.2010, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

Репутация: нет
Всего: нет



спасибо - я вчера разобрался...

Это сообщение отредактировал(а) SectoR - 27.10.2010, 08:30
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.