2012-06-17 2 views
0

Я работаю над этим банкоматом (максимум 50 клиентов), где я читаю .txt-файл, а затем создаю несколько экземпляров, сохраняя их в массиве, чтобы другие классы могли позвоните им. Когда я прочитал файл, введены только данные последнего клиента - я не могу заставить первых клиентов получить правильный результат.Ошибка при чтении экземпляров

Есть несколько методов для каждого «Set», только в случае, если поле не говорит «ни один», так что я могу оставить его в качестве

Double.NaN or null, for example. 

Я исследовал на нескольких веб-сайтах, и там WASN «Очень важно хранить экземпляры в массивах, хотя на одном веб-сайте он сказал, что я должен объявить его так же, как обычный массив.

private static String firstname = ""; 
    private static String lastname = ""; 
    private static int sin = 0; 
    private static int year = 0; 
    private static int month = 0; 
    private static int day = 0; 
    private static double sbalance = 0.0; 
    private static double cbalance = 0.0; 
    private static double cardbal = 0.0; 
    private static boolean confirm = false; 

    public int customernumber; 
    public static customer [] customerarray = new customer [50]; 


    public static void readfile(){ 
    String sb = ""; 
    String cb = ""; 
    String ca = ""; 

    int counter = 0; 
    String thisLine; 


    try { 
     BufferedReader br = new BufferedReader(new FileReader("bankinfo.txt")); 
     while ((thisLine = br.readLine()) != null) { 
      customerarray[counter].setLastName(thisLine); 
      System.out.print (customerarray[counter].getLastName()); 
      customerarray[counter].setFirstName(br.readLine()); 
      System.out.print (customerarray[counter].getFirstName()); 
      customerarray[counter].setSin(Integer.parseInt(br.readLine())); 
      System.out.print (customerarray[counter].getSin()); 
      customerarray[counter].setYear(Integer.parseInt(br.readLine())); 
      System.out.print (customerarray[counter].getYear()); 
      customerarray[counter].setMonth(Integer.parseInt(br.readLine())); 
      System.out.print (customerarray[counter].getMonth()); 
      customerarray[counter].setDay(Integer.parseInt(br.readLine())); 
      System.out.print (customerarray[counter].getDay()); 
      sb = br.readLine(); 
      if (sb.equals("none")){ 
       customerarray[counter].setSBalance("none") ; 
       System.out.print (customerarray[counter].getSBalance()); 
      } 
      else { 
       customerarray[counter].setSBalance(Double.parseDouble(sb)); 
       System.out.print (customerarray[counter].getSBalance()); 
      } 
      cb = br.readLine(); 

      if (cb.equals ("none")){ 
       customerarray[counter].setCBalance ("none"); 
      } 
      else if (cb != "none"){ 
       customerarray[counter].setCBalance(Double.parseDouble(cb)); 
      } 
      else{ 
       System.out.print ("error CBalance"); 
      } 

      ca = br.readLine(); 
      if (ca.equals("none")){ 
       customerarray[counter].setSBalance("none") ; 
      } 
      else { 
       customerarray[counter].setCardbal(Double.parseDouble(ca)); 
      } 

      counter = counter + 1; 

     } 
     br.close(); 
    } 

     catch (IOException e) { 
      System.err.println("Error: " + e); 
     } 

    } 

Текстовый файл довольно прост - он состоит из 9 полей для каждого клиента. Если у них нет определенной учетной записи, она отображается как «нет», и когда читатель читает их, он использует вариантный метод со строковым вводом и устанавливает double = Double.NaN();

Ниже приведен пример текстового файла. Каждый клиент имеет 9 полей.

Tam 
Christian 
984635684 
1996 
6 
12 
none 
10233.52 
none 
Yang 
Wesley 
324917400 
1996 
8 
1 
3233.36 
none 
none 
Lin 
Sophia 
1984 
1985 
5 
6 
912.12 
58.96 
95.63 
+0

Что такое 'Double.DaD' снова? Вы имеете в виду ['Double.NaN'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#NaN)? – Makoto

+0

Упс, мой плохой, у меня это правильно в моей основной программе, это просто пошло мне в голову. – kryyn

+1

код, который вы отправили, даже не запускается, нет вызова конструктора объектов-клиентов –

ответ

0

Я не вижу, где вы инстанцировании каждое отдельное место, где расположены customer[] с фактическими customer объектов.

Добавьте эту строку до после начала вашего while цикла:

customerarray[counter] = new customer(); 

При создании массива объектов, все элементы в нем по умолчанию нулевого значения. Вы не можете разыменовать нуль, так что у вас проблемы.

+0

Я так понимаю, это неправильно? общественный статический клиент [] customerarray = новый клиент [50]; – kryyn

+0

Это дает только пространство * для самого массива *, но не отдельные элементы * внутри * массива. – Makoto

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