Назначение строки для ArrayList, извлеченного из файла - PullRequest
0 голосов
/ 20 февраля 2011

Я импортировал Список Strings из файла и поместил их в arrayList.Я пытаюсь обрезать конец этих массивов, поэтому я помещаю их в отдельный String формат

Вот где я устанавливаю x

x = new ArrayList<BankAccounts>();
try {
    Scanner reader;
    reader = new Scanner( new File("F:\\myCreditUnion.txt") );

    while ( reader.hasNext() )
    {
        String inputLine = reader.nextLine();
        first = inputLine.substring(0, 3);
        second = Double.parseDouble(inputLine.substring(5, inputLine.length()));
        x.add(new BankAccounts(first, second));
    }

    reader.close(); 
}

, и это гдея пытаюсь отрубить конец

double howmuch;
for(int i = 0; i < x.size(); i++)
{
     list.equals(x.get(i));
     howmuch = Double.parseDouble(list.substring(5, list.length()));
}
// x is the list

Я получаю nullpointerexception.Хотите знать, как это исправить, поскольку я довольно новичок в программировании.

Документ, который я импортирую, содержит комбинации букв # и 101, такие как 101s 583.58

Ответы [ 3 ]

0 голосов
/ 20 февраля 2011

Чтобы присвоить значение list, вы используете list = x.get(i); вместо list.equals(x.get(i));

Обновление:

  • equals() не присваивает значения, он только проверяет, равны ли два объекта.

  • Значение, возвращаемое x.get (i), будет BankAccount, поэтому вы не можете присвоить его списку (который является строкой)

  • Вы должны либо превратить BankAccount в String с помощью toString (), либо вы должны извлечь String из него, вызвав один из методов BankAccount, прежде чем присваивать его списку, как это работает, зависит от методы, предоставляемые классом BankAccount.

0 голосов
/ 20 февраля 2011

Относительно вашего кода: у вас, вероятно, есть какое-то объявление, похожее на: String line = null; где-то перед вставкой вашего последнего фрагмента кода, и вы получаете NullPointerException в строке list.equals(x.get(i));. Это потому, что ваш list объект не инициализирован. Однако вам не нужно этого делать. Смотри ниже.

Чтобы сделать то, что вы хотите, вы должны использовать следующий код:

Определение класса для BankAccounts:

class BankAccounts {
   public String account; 
   public Double value;

   public BankAccounts(String account, Double value)
   {
      this.account = account;
      this.value = value;
   }
}

И переписать свой код так:

List<BankAccounts> x = new ArrayList<BankAccounts>();
try {
    Scanner reader;
    reader = new Scanner( new File("F:\\myCreditUnion.txt") );

    while ( reader.hasNext() )
    {
        String inputLine = reader.nextLine();
        first = inputLine.substring(0, 3);
        second = Double.parseDouble(inputLine.substring(5, inputLine.length()));
        x.add(new BankAccounts(first, second));
    }

    reader.close(); 
}

Мне кажется, что ваши входные файлы содержат строку вида ABC 10.324. Вы правильно разбираете это на BankAccounts объекты (каждый из которых содержит String, представляющий имя учетной записи и Double, представляющий сумму), когда вы читаете их из файла. Так что нет необходимости повторять это снова.

Код для итерации и просмотра сумм приведен ниже;

// x is the list    
double howmuch = 0;
for(int i = 0; i < x.size(); i++)
{
    BankAccounts accounts = x.get(i);
    howmuch = accounts.amount; // there is no need to cast since unboxing will occur here.
    // here howmuch will contain the amount for each account
}
0 голосов
/ 20 февраля 2011

Если в приведенном выше коде вы получаете исключение NullPointerException, либо list, либо x равно нулю. Проверьте, где вы устанавливаете их значение, или включите эту часть кода в вопрос.

...