錄入商品資訊案例_總結_1120
商品錄入案例總結_1120
需求與功能
定義一個商品的類 當中有 : 商品名字 , 商品價格 ,商品隨機碼(類似第三題的隨機碼)等屬性;
- a:生成對應的 構造方法 , get set方法.toString()方法.
- b:生成五個商品物件,儲存起來. 資料要 鍵盤 錄入
- c:將所有商品的資訊 展示出來.
- d:鍵盤錄入商品隨隨機碼 ,判斷該隨機碼是否存在
分析
a:生成對應的 構造方法 , get set方法.toString()方法.
通過快捷鍵能夠快速地點出來。
b:生成五個商品物件,儲存起來. 資料要 鍵盤 錄入
建立一個方法,引數列表為物件陣列。鍵盤錄入用Scanner,通過迴圈例項化物件,再通過呼叫set方法給物件賦值,最後將物件儲存到陣列中。
c:將所有商品的資訊 展示出來.
建立一個方法,引數列表為物件陣列。通過for迴圈遍歷傳入陣列的資料,用toString()方法將資料列印。
d:鍵盤錄入商品隨隨機碼 ,判斷該隨機碼是否存在
建立一個方法,引數列表為物件陣列。鍵盤錄入用Scanner,通過呼叫netx()再呼叫equals()方法判斷是否與傳入的陣列物件中的元素的隨機碼相同。
程式碼實現
商品類的定義
class Goods{ private String name; //商品名字 private double price; //商品價格 private String randNum; //商品隨機碼 public Goods() { //空參構造 super(); } public Goods(String name, double price, String randNum) {//有參構造 super(); this.name = name; this.price = price; this.randNum = randNum; } //get/set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getRandNum() { return randNum; } public void setRandNum(String randNum) { this.randNum = randNum; } //重寫toString()方法 public String toString() { return "Goods [商品名字=" + name + "\t價格=" + price + "元\t隨機碼="+ randNum + "]"; } }
建立一個商品類Goods,定義商品名稱,商品價格,商品隨機碼。有參和無參構造方法,set和get方法,最後重寫toString()方法。這些方法都是可以通過快捷鍵寫出來的。
第一個功能方法的實現:
//b:生成五個商品物件,儲存起來. 資料要 鍵盤 錄入 public static void enterGoods(Goods[] arr){ String randNum = ""; //定義一個字串變數,存放隨機碼 for(int i = 0; i < arr.length; i++){ Goods g = new Goods(); //建立物件 System.out.println("請錄入商品的名字:"); String name = new Scanner(System.in).next(); g.setName(name); //錄入商品名字,通過setName()方法給商品名字賦值 System.out.println("請錄入商品的價格:"); double price = new Scanner(System.in).nextDouble(); g.setPrice(price); //錄入商品價格,通過setName()方法給價格名字賦值 randNum = randNum(); //呼叫隨機碼方法,獲取隨機碼 g.setRandNum(randNum); //通過setRandNum()方法給商品隨機碼賦值 arr[i] = g; //把資訊錄入完成的物件儲存到物件陣列 System.out.print("商品錄入成功!"); System.out.println("該商品的隨機碼為:"+randNum); } }
需要注意的是,在for迴圈內部要建立物件。通過建立的物件去呼叫set()方法,把使用者輸入的資料賦值給該物件。再把這個物件儲存到物件陣列中。如果沒有建立物件,而是直接用arr[i]直接呼叫set()方法賦值的話,會報錯,顯示空指標異常。
第二個功能方法的實現:
//c:將所有商品的資訊 展示出來. public static void goodsInfoShow(Goods[] arr){ System.out.println("商品資訊:"); for(int i = 0; i < arr.length; i++){ System.out.println(arr[i].toString()); //呼叫toString()方法,列印商品資訊 } }
利用for迴圈遍歷每一個物件陣列的元素,再通過呼叫toString()方法列印商品資訊。
第三個功能方法的實現:
//d:鍵盤錄入商品隨隨機碼 ,判斷該隨機碼是否存在 public static void isRandNumIn(Goods[] arr){ System.out.println("請輸入一個四位數的隨機碼:"); Scanner sc = new Scanner(System.in); String str = sc.next(); //獲取使用者輸入的隨機碼 for(int i = 1; i <= arr.length; i++){ //遍歷商品陣列 if (str.equals(arr[i-1].getRandNum())){ //呼叫equals()方法,與商品陣列進行比較 System.out.println("該隨機碼存在!"); System.out.println(arr[i-1].toString()); //如果該隨機碼存在,就列印與之對應的商品資訊 break; }else if(i == arr.length){ System.out.println("該隨機碼不存在!"); } } }
在這裡我把for迴圈的:起始位置定義為1,是因為這樣容易判斷隨機碼不存在的情況,即:當i == arr.lenthg時,證明物件陣列中,沒有與之物件的元素。
獲取隨機碼
//獲取隨機碼的方法 public static String randNum() { String str = ""; for(int i = 0; i < 4; i++){ //隨機四個數字,和字串拼接,使其轉換成字串 str = new Random().nextInt(10)+str; } return str; }
這裡我把獲取隨機碼打包成一個方法,方便呼叫。
主方法
public class GoodsInfo { public static void main(String[] args) { Goods[] g = new Goods[4]; //建立一個長度為5的Goods物件陣列 enterGoods(g); //呼叫enterGoods()方法,錄入商品資訊 goodsInfoShow(g); //呼叫goodsInfoShow()方法,列印商品資訊 isRandNumIn(g); //呼叫isRandNumIN()方法,判斷隨機碼是否存在 }
在主方法建立一個物件陣列,長度為5。呼叫各方法。
總結
Scanner和Random的用法,我經常採用匿名的方式寫。不過也有一些是必須要定義一個變數去儲存的。
在第一個功能方法的實現裡,我定義了一個String變數,儲存呼叫randNum()方法後的返回值。
如果沒有定義一個randNum變數儲存呼叫randNum()的返回值,而是直接在setRandNum()傳入setRandNum(randNum());又用一個輸入語句System.out.println(“該商品的隨機碼為:”+randNum());那麼這樣可能會導致同個商品的隨機碼出現不同。因為同個商品呼叫了兩次randNum()方法。
在實現第一個功能的時候,我沒有在實現方法裡建立陣列物件,結果一直報空指標異常。後來才發現,在for迴圈內部要建立物件。通過建立的物件去呼叫set()方法,把使用者輸入的資料賦值給該物件。再把這個物件儲存到物件陣列中。如果沒有建立物件,而是直接用arr[i]直接呼叫set()方法賦值的話,就會報錯。
在實現第三個功能時,要判斷使用者輸入的隨機碼是否存在?一開始我用的是把使用者輸入的資料呼叫equals()方法,和陣列物件進行遍歷,如果相同就輸入“存在”,如果和最後一個比較還是不相同,那麼就輸入“不存在”。我用if(){}else if(使用者的資料和陣列最後一個數據比較){“不存在”};
但是這樣是錯的。後來才改用:在for裡把起始位置設定為1。當for迴圈最後仍沒有break跳出,就證明該資料不存在。
做這個專案的時間花的太長,還是不夠熟悉面線物件。看到專案,心裡沒有計劃好框架,功能都是一個個寫出來的,最後才拼接上。有很多細節也是一開始沒有想到的。這應該是不熟手的原因。不過相比於之前,也算是有進步了。