1. 程式人生 > >錄入商品資訊案例_總結_1120

錄入商品資訊案例_總結_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跳出,就證明該資料不存在。

做這個專案的時間花的太長,還是不夠熟悉面線物件。看到專案,心裡沒有計劃好框架,功能都是一個個寫出來的,最後才拼接上。有很多細節也是一開始沒有想到的。這應該是不熟手的原因。不過相比於之前,也算是有進步了。