2017-10-13 33 views
0

我創建了一個有幾個對象的類。如何將值複製到對象數組

class SalesPerson { 
    String number; 
    String name; 
    double salesAmount; 
} 


所以現在我需要一些數據從文本文件複製到一個數組。

「sales.txt」

S0001 
Alice 
2000 
S0002 
Bob 
3400 
S0003 
Cindy 
1200 
S0004 
Dave 
2600 


下面是我的代碼的縮短版,假設的getName(S)的setName(S)和構造函數創建文本文件可以成功讀取:

class ArrayImport { 
    public static void main(String args[]) throws FileNotFoundException { 
     String fileName = "sales.txt"; 
     SalesPerson sp = new SalesPerson[4]; //Manually counted 

     //Read the file 
     Scanner sc = new Scanner(new FileReader(fileName)); 

     //Copy data to array 
     int i = 0; 
     while (sc.hasNext()) { 
      sp[i].name = sc.nextLine(); //Error starts here 
      sp[i].number = sc.nextLine(); 
      sp[i].salesAmount = Double.parseDouble(sc.nextLine()); 
      i++; 
     } 
    } 
} 

我收到錯誤消息「在線程異常‘主’顯示java.lang.NullPointerException ......」她指着我的評論「錯誤S上線撻這裏「。


所以我猜這不是給對象數組賦值的方法,如果我的猜測是正確的,那麼正確的語法是什麼?

+1

您尚未創建SalesPerson'的'任何實例。在你開始分配給單個字段之前,你所缺少的就是'staff [i] = new SalesPerson();'' (我個人寫了一個接受三個參數的'SalesPerson'構造函數,但這是另一回事,我還使用'BigDecimal'作爲貨幣值而不是'double')。 –

回答

0

對象的實例爲空,因此您必須先創建實例。所以創建像這樣的實例'staff [i] = new SalesPerson();' 我將實例創建添加到您的代碼中。

class ArrayImport { 
    public static void main(String args[]) throws FileNotFoundException { 
     String fileName = "sales.txt"; 
     SalesPerson sp = new SalesPerson[4]; //Manually counted 

     //Read the file 
     Scanner sc = new Scanner(new FileReader(fileName)); 

     //Copy data to array 
     int i = 0; 
     while (sc.hasNext()) { 
      staff[i] = new SalesPerson(); 
      staff[i].name = sc.nextLine(); //Error starts here 
      staff[i].number = sc.nextLine(); 
      staff[i].salesAmount = Double.parseDouble(sc.nextLine()); 
      i++; 
     } 
    } 
} 
+0

我剛剛意識到我忘記了改變「staff 「到」sp「。我想它會更短,所以在線程中閱讀起來更容易。 無論如何,我試圖用自己的方式創建對象的一個​​實例,但得到了一個「java.lang.ArrayIndexOutOfBoundsException」錯誤,而是指向創建對象實例的那一行。 – chin98edwin

+0

索引出來的boub除了是你的數組長度不夠,所以將數組大小改爲更大的數量。當前是4 – janith1024

+0

嗯,事實證明,我忘記了我的實際sales.txt文件不僅僅是這些記錄。我有點想在這裏簡短,但最終讓我感到困惑。你的方法確實有效。非常感謝。 – chin98edwin

0

工作例如:

public class ArrayImport { 

     public static void main(String[] args) throws FileNotFoundException { 
      List<SalesPerson> persons = new ArrayList<>(); 
      SalesPerson salesPerson = null; //Manually counted 

      //Read the file 
      Scanner scanner = new Scanner(new FileReader("sales.txt")); 

      int count=0; 
      while(scanner.hasNext()) { 
       if(count==0 || count%3 == 0) { 
        salesPerson = new SalesPerson(); 
        salesPerson.setNumber(scanner.nextLine()); 
        salesPerson.setName(scanner.nextLine()); 
        salesPerson.setSalesAmount(Double.parseDouble(scanner.nextLine())); 
        persons.add(salesPerson); 
        count+=3; 
       } 
      } 
      persons.forEach(person->System.out.println(person.toString())); 
     } 
    } 
+0

這段代碼是可運行的,但打印的線條很奇怪。 對於打印的「人員」的每個信息,輸出如下所示:「SalesPerson @ 1b28cdfa」。 我試過System.out.println(salesPerson.name)並且實際上得到了一些東西,確認數據正在被複制,只是在使用forEach打印時它們不顯示。 – chin98edwin

相關問題