0

私はこの種の ATM (最大 50 人の顧客) に取り組んでおり、.txt ファイルを読み取り、複数のインスタンスを作成して配列に格納し、他のクラスがそれらを呼び出せるようにしています。ファイルを読むと、最後の顧客の情報だけが正しく入力されています。最初の数人の顧客の出力が正しいとは限りません。

フィールドに「なし」と表示されている場合に備えて、「セット」ごとに複数のメソッドがあるため、そのままにしておくことができます

   Double.NaN or null, for example.

私はいくつかの Web サイトで調査しましたが、インスタンスを配列に格納することについてはあまり説明がありませんでしたが、ある Web サイトでは、通常の配列と同じように宣言する必要があるとのことでした。

  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
4

1 に答える 1

0

customer[]実際のcustomerオブジェクトを使用して、個々の場所をインスタンス化している場所がわかりません。

whileループの開始前に次の行を追加します。

customerarray[counter] = new customer();

オブジェクト配列を作成すると、その中のすべての要素がデフォルトで null になります。null を逆参照できないため、問題が発生しています。

于 2012-06-17T01:54:10.143 に答える