2012-11-17 21 views
2

我有一個CS類的介紹性作業。我有一個名爲Car的類和一個單獨的數據文件,用於稍後的文件重定向。我到:在Java中,如何使用循環實例化新對象,將它們存儲在數組中,然後使用它們?

使用定點循環,在化妝,一年,每節車廂 對象的價格看,實例化對象,並將其存儲在陣列carArr []英寸例如,如果您創建一個分配給名爲 car1的變量的汽車對象,則可以執行:carArr [i] = car1其中「i」是一個int計數器。 此外,統計數組中的元素,因爲它們都存儲在一個int 變量,如「我」或numCars

這是到目前爲止我的代碼:

Scanner scan = new Scanner(System.in); 
final int SIZE_ARR = 30; 
Car [] carArr = new Car[SIZE_ARR]; 
int i = 0; 
int numcars = 0; 
String make = ""; 
int year = 0; 
double price = 0.0; 
final String SENT = "EndDatabase"; 

while (!scan.next().equals(SENT)) 
{ 
    make = scan.next(); 
    year = scan.nextInt(); 
    price = scan.nextDouble(); 
    Car car1 = new Car(make, year, price); 
    carArr[i] = car1; 
    i++; 
    numCars++; 
} 

如何創建一個新的每次我經過循環並讀入不具有相同名稱的新數據時,Car對象? 他們需要有不同的名字嗎? 現在,我將製作一堆名爲car1的物體。我最終必須打印出數據庫,然後將它們作爲搜索關鍵字在新的Car對象中讀取。然後,按鍵將依次搜索carArr數組。 由於數組中的每個元素都填充了一個同名的對象,搜索會產生困惑嗎?

而且,當我通過搜索的陣列和我的存儲對象比較我的搜索對象做我需要做的:

key.equals(carArr[i]) 

威爾每個對象的實例變量進行相互比較?

在我的Car類中,我需要爲我的year,make和price實例變量提供一個accessor方法。我需要在哪裏使用這些? 它也說明我必須有一個叫做setPrice的「mutator方法」和「等於方法」。 任何想法他們對我來說意味着什麼? 對不起,這和多個問題的長度。我只是想保持領先於我的工作量,而我的老師不回覆電子郵件。謝謝!編號*********************************** *********** 我明白了。謝謝!

回答

5

我的問題是,如何在每次通過循環並讀入不具有相同名稱的新數據時創建新的Car對象?

物體沒有名稱。

就這樣,我只是在做一堆名爲car1的物體。

不,你會創建很多對象,就這些。在每次迭代中,您將分配一個對變量的引用,其名稱爲car1,但變量是而不是一個對象 - 甚至該變量的值不是對象,而是一個引用。

它會更簡單,以獲得完全雖然擺脫car1,而直接指定參考放入數組:

carArr[i] = new Car(make, year, price); 

它甚至會更好地使用List<Car>而不是數組 - 那麼你不不需要分開跟蹤尺寸。我寫的代碼如下:

Scanner scan = new Scanner(System.in); 
List<Car> cars = new ArrayList<Car>(); 

while (!scan.next().equals("EndDatabase")) 
{ 
    String make = scan.next(); 
    int year = scan.nextInt(); 
    double price = scan.nextDouble(); 
    cars.add(new Car(make, year, price)); 
} 

對於你可能需要使用數組賦值的緣故,但是這只是煩人......

我也很可能改變price成爲BigDecimal而不是double - 您不應將二進制浮點類型用於貨幣值。順便說一句,你一定要放棄在循環的每次迭代中讀取的第一個值?你所做的只是檢查它是否爲EndDatabase - 如果不是這樣,你基本上失去了不管它是什麼......)

+0

我需要使用一個數組而不是數組列表。我也需要使'價格'翻倍,因爲我需要在我的Car類中使用格式化方法。我已經說過了。此外,你是什麼意思「擺脫'car1' – art3m1sm00n

+0

另外,你是對的,我必須調整我的哨兵循環,以便讀入的第一個數據不會丟棄,如果它不是哨兵。我只是最初在循環之前閱讀它,然後在我的循環結束時再次閱讀它 – art3m1sm00n

+0

@GabrielleLee:對不起,我編輯了這篇文章 - 我的意思是寫:'carArr [i] = new Car(make,年份,價格);' - 這意味着你根本不需要'car1'變量,只是因爲你必須在'Car'中有一個方法來格式化價格並不意味着它必須是'double' - 你也可以格式化'BigDecimal'值... –

相關問題