JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException
Peter830829





發文: 19
積分: 0
於 2018-06-06 16:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
餐廳管理系統

問題說明,這個例子主要的功能選項如下:

(1) 系統選擇清單
(2) 新增菜單項目
(3) 列印所有菜單
(4) 顧客點菜作業
(5) 會計收款作業
Devil 列印所有點菜
(7) 結 束 作 業

以上我已經完成了8成左右。
從4.顧客點菜作業沒問題,選項4之後馬上接 5.會計收款作業,這裡我要計算消費的 "總金額" 但一直出現問題,而第 6.列印所有點菜其實就跟第 5.會計收款作業是差不多的東西。

以下附上程式碼,其中主要的問題在 219~283 行,其中 232行 的 //第一種方法 是我嘗試最接近的解法,謝謝各位前輩!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
import java.util.Scanner;
 
//class Item{         //菜單內容
//    int price;      //價格
//    int calorie;    //熱量
//    String name;    //菜名
//}
 
//class Fare_item{    //顧客點餐的內容(動態新增菜單)
//    int No;         //桌次號碼
//    String name;    //菜名
//    int price;      //價格
//    int calorie;    //熱量
//}
 
public class RestaurantManagementSystem_ObjectArray {
 
    static Item[] Menu = new Item[100];            //菜單價目表
    static int Item_no = 0;                                 //菜單項目數量
    static Fare_item[] Fare = new Fare_item[20];//顧客點菜項目
    static int Fare_no = 0;                                 //顧客點菜項目數量
    static Scanner keyin = new Scanner(System.in);
    static int table_No;                                    
 
    public static void main(String[] args) {
 
        int select;
        selectMenu();
//        printSelect();
        select = keyin.nextInt();
 
        while (select != 7){
            switch (select){
                case 1:
                    selectMenu();           //1.匯入菜單項目
                    break;
                case 2:
                    addItemtoMenu();        //2.新增菜單項目
//                    select = keyin.nextInt();
                    break;
                case 3:
                    printMenu();            //3.印出所有菜單
                    break;
                case 4:
                    addFare();              //4.顧客點菜作業
                    break;
                case 5:
                    AccountingWork();       //5.會計收款作業
                    break;
                case 6:
                    printFare();            //6.列印所有點菜
                    break;
                    default:
                        System.out.printf("輸入錯誤,請重新選擇!!\n");
                        break;
            }
            selectMenu();
//            printSelect();
            select = keyin.nextInt();
        }
 
    }
 
    //1.餐廳管理系統項目選擇清單(非菜色的菜單)
    static void selectMenu(){
        System.out.printf("\n****** 台北美食餐廳 管理系統 ******\n");
        System.out.printf("(1) 系統選擇清單\n");
        System.out.printf("(2) 新增菜單項目\n");
        System.out.printf("(3) 列印所有菜單\n");
        System.out.printf("(4) 顧客點菜作業\n");
        System.out.printf("(5) 會計收款作業\n");
        System.out.printf("(6) 列印所有點菜\n");
        System.out.printf("(7) 結 束 作 業\n");
        System.out.printf("\t請輸入選擇 ==>");
    }
 
    //2.新增菜單項目
    static void addItemtoMenu(){
//        以下註解省略(測試用)
//        int value, tax, k=0;                //『int k=0;』。利用變數 k 紀錄目前資料的比數有多寡;宣告時給予初始值 0。
//        String sel;
        Scanner keyin = new Scanner(System.in);
        Menu[Item_no] = new Item();
//        Menu[Fare_no] = new Item();
        System.out.printf("請輸入菜單名稱 =>");
        Menu[Item_no].name = keyin.nextLine();
 
        System.out.printf("請輸入價格 =>");
        Menu[Item_no].price = keyin.nextInt();
 
        System.out.printf("請輸入熱量 =>");
        Menu[Item_no].calorie = keyin.nextInt();
 
        Item_no = Item_no + 1;
 
//        以下註解省略(測試用)
//        Item_no = Item_no + 1;
//        for (int i=0; i<name
//        Menu[Item_no].name = Menu[Item_no].name + 1;
//        Fare_no = Fare_no + 1;
//            Fare_no = Fare_no +1;
        }
 
    //3.印出所有菜單
    static void printMenu() {
        // 給予菜單初值
        String name[] = {"蠔油香菇", "蒜泥白肉", "筍干扣肉", "五味花枝",
                "紅燒鮮魚", "麻婆豆腐", "白玉珍丸", "快炒青菜",
                "鮑 魚 湯", "水晶蝦餃", "紅油炒手",
                "叉 燒 酥", "藕斷絲連", "龍門米粉",
                "瑤柱炒飯", "龍蝦鮮麵", "白    飯", "足料觀湯",
                "酸黃瓜湯", "海 鮮 湯", "清    湯",
                "西 米 露"};
 
        int price[] = {300, 250, 320, 200, 400, 100, 150, 100, 100,
                200, 200, 200, 200, 300, 300, 400, 20, 500,
                200, 200, 20, 150};
 
        int calorie[] = {800, 500, 700, 600, 600, 200, 300, 150, 100,
                300, 400, 400, 300, 500, 500, 400, 100, 800,
                300, 300, 10, 200};
 
        //印出目前有幾道菜
        for (int i=0; i<name.length; i++){
            Item_no = Item_no +1;
        }
        System.out.printf("目前有:%d\n", Item_no);
 
        //印出菜單內容(菜單、價格、卡路里)
        for (int i=0; i<name.length; i++){
            Menu[i] = new Item();
            Menu[i].name = name[i];
            Menu[i].price = price[i];
            Menu[i].calorie = calorie[i];
        }
        System.out.printf("  菜單\t\t價格\t\t卡路里\n");
        for (int i=0; i<name.length; i++) {
            Item_no = Item_no +1;
            System.out.printf("%s\t\t", Menu[i].name);
            System.out.printf("%d\t\t", Menu[i].price);
            System.out.printf("%d\t", Menu[i].calorie);
            System.out.printf("\n");
        }
    }
 
        //4.顧客點菜作業
        static void addFare(){
 
            // 給予菜單初值
            String name[] = {"蠔油香菇","蒜泥白肉","筍干扣肉","五味花枝",
                    "紅燒鮮魚","麻婆豆腐","白玉珍丸","快炒青菜",
                    "鮑 魚 湯", "水晶蝦餃", "紅油炒手",
                    "叉 燒 酥","藕斷絲連","龍門米粉",
                    "瑤柱炒飯", "龍蝦鮮麵","白    飯","足料觀湯",
                    "酸黃瓜湯","海 鮮 湯", "清    湯",
                    "西 米 露"};
 
            int price[] = {300,250,320,200,400,100,150,100,100,
                    200, 200,200,200,300, 300,400,20,500,
                    200,200,20,150};
 
            int calorie[] = {800,500,700,600,600,200,300,150, 100,
                    300,400,400,300,500, 500,400,100,800,
                    300,300,10,200};
 
            for (int i=0; i<name.length; i++){
                Menu[i] = new Item();
                Menu[i].name = name[i];
                Menu[i].price = price[i];
                Menu[i].calorie = calorie[i];
            }
 
            // 給予菜單初值結束、點菜作業開始
            // int table_No, count, item;              //table_N桌次, item菜名,
            int count, item;              //table_No桌次第五個系統選項會計作業也需要用到固我們設置成全域變數, item菜名,
            int total_money=0, total_calorie=0;     //總金額、總熱量
 
            System.out.printf("請輸入桌次 =>>");
            table_No = keyin.nextInt();
 
            IniMenu();
 
            System.out.printf("(0)結束點菜\n");
            System.out.printf("請輸入菜名編號 =>");
            item = keyin.nextInt();
 
            /* 點菜累加消費金額及卡路里 */
            count = 0;
 
            while (item != 0 ){
                Fare[Fare_no] = new Fare_item();
                Fare[Fare_no].No = table_No;
                Fare[Fare_no].name = Menu[item-1].name;
                Fare[Fare_no].price = Menu[item-1].price;
                Fare[Fare_no].calorie = Menu[item-1].calorie;
                total_money = total_money + Fare[Fare_no].price;
                total_calorie = total_calorie + Fare[Fare_no].calorie;
                Fare_no = Fare_no + 1;
                count = count + 1;
                System.out.printf("累計%d元,%d卡路里、請輸入菜名的編號 =>>",total_money,total_calorie);
                item = keyin.nextInt();
            }
 
            //顯示第幾桌、菜單內容和總金額
            System.out.printf("\n%d 桌顧客菜單如下:\n",table_No);
            System.out.printf(" 菜名\t\t價格\t\t熱量\n");
            for (int i=0; i<count; i++){
                System.out.printf("%s\t\t%3d\t\t%3d\n",Fare[i].name,Fare[i].price,Fare[i].calorie);
            }
            System.out.printf("總計\t\t總價格:%d\t\t總熱量:%d\n\n",total_money,total_calorie);
 
            //顯示廚房增加的菜單(桌號、菜名)
            System.out.printf("\n廚房增加菜單如下:\n");
            for (int i=0; i<count; i++){
                System.out.printf("%3d桌\t%s\n",Fare[i].No,Fare[i].name);
            }
        }
 
        //5.會計收款作業
        static void AccountingWork(){
            int tableNo_accounting, count;
            int total_money=0;
 
            /* 點菜累加消費金額及卡路里 */
            count = 0;
 
            System.out.printf("請輸入買單桌號 =>");
            tableNo_accounting = keyin.nextInt();
 
//            total_money = Fare + total_money;
 
//            第一種方法
            for (int i=0; i<=Fare_no; i++) {
                Fare[i].price = Menu[i].price;
                total_money = Fare[i].price + total_money;
                Fare_no = Fare_no + 1;
                count = count + 1;
            }
            
//            第二種方法
//            while (tableNo_accounting != 0){
//                Fare[Fare_no] = new Fare_item();
//                Fare[Fare_no].No = table_No;
//                Fare[Fare_no].price = Menu[Fare_no].price;
//                total_money = Fare[Fare_no].price + total_money;
//                Fare_no = Fare_no + 1;
//                count = count + 1;
//            }
 
            //顯示會計處收款菜單(菜名、單價、合計金額)
            for (int i=0; i<count; i++){
                System.out.printf("菜名:%s\t\t單價:%s\n",Fare[i].name,Fare[i].price);
 
//                System.out.printf("%3d桌\t%s\n",Fare[i].No,Fare[i].name);
            }
            System.out.printf("合\t計 = %d",total_money);
 
        }
 
        //6.列印所有點菜
        static void printFare(){
            int count=0;
            System.out.printf("桌次\t 菜單項目\n");
            for (int i=0; i<count; i++){
                System.out.printf("%3d桌\t%s\n",Fare[i].No,Fare[i].name);
            }
 
//            for (int i=0; i<)
 
            System.out.printf("\n廚房增加菜單如下:\n");
            for (int i=0; i<count; i++){
                System.out.printf("%3d桌\t%s\n",Fare[i].No,Fare[i].name);
            }
        }
 
    static void IniMenu() {
 
        for (int i=0; i<Fare.length; i++){          //小於菜單項目數量
            System.out.printf("(%d)%s  ", (i+1), Menu[i].name);
            if ((i+1)%5 == 0){                      //可以整除就做斷行
                System.out.printf("\n");
            }
        }
 
        
//        for (int i=0; i< i++) {
//
//            Menu[i] = new Item();
//
//            Menu[i].name = name[i];
//
//            Menu[i].price = price[i];
//
//            Menu[i].calory = calory[i];
//
//            Item_No = Item_No + 1;
 
        }
 
    }
 


reply to postreply to post
作者 Re:餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException [Re:Peter830829]
qrtt1





發文: 1747
積分: 31
於 2018-06-07 13:21 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
問題發 1 個版就行囉。
會有人回就是會有人回,沒有人回,發再多版都沒用的啦。

是說,你目前用什麼工具開發啊?
有試著用 debugger 追看看問題嗎?


reply to postreply to post
蝸牛角上爭何事?石火光中寄此身,隨富隨貧且歡樂,不開口笑是癡人。
my notes
作者 Re:餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException [Re:qrtt1]
Peter830829





發文: 19
積分: 0
於 2018-06-08 05:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
好的了解!!

我目前用intellij 開發,debug有內建的工具~


reply to postreply to post
作者 Re:餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException [Re:Peter830829]
qrtt1





發文: 1747
積分: 31
於 2018-06-08 14:03 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Peter830829 wrote:
好的了解!!

我目前用intellij 開發,debug有內建的工具~


呵,那就會很 easy 囉 Smile


reply to postreply to post
蝸牛角上爭何事?石火光中寄此身,隨富隨貧且歡樂,不開口笑是癡人。
my notes
作者 Re:餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException [Re:qrtt1]
Peter830829





發文: 19
積分: 0
於 2018-06-18 14:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
是說就是 抓過蟲 但就是找不到問題的點,

Exception in thread "main" java.lang.NullPointerException
  at Java_ObjectVariable_AND_ObjectArray.RestaurantManagementSystem_ObjectArray.AccountingWork(RestaurantManagementSystem_ObjectArray.java:240)
  at Java_ObjectVariable_AND_ObjectArray.RestaurantManagementSystem_ObjectArray.main(RestaurantManagementSystem_ObjectArray.java:53)

頻頻出現這類的錯誤 SadQuestion


reply to postreply to post
作者 Re:餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException [Re:Peter830829]
ynchang





發文: 151
積分: 0
於 2018-06-19 03:09 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Peter830829 wrote:
是說就是 抓過蟲 但就是找不到問題的點,

Exception in thread "main" java.lang.NullPointerException
  at Java_ObjectVariable_AND_ObjectArray.RestaurantManagementSystem_ObjectArray.AccountingWork(RestaurantManagementSystem_ObjectArray.java:240)
  at Java_ObjectVariable_AND_ObjectArray.RestaurantManagementSystem_ObjectArray.main(RestaurantManagementSystem_ObjectArray.java:53)

頻頻出現這類的錯誤 SadQuestion


RestaurantManagementSystem_ObjectArray.java:240 <<< 這就是要你看RestaurantManagementSystem_ObjectArray.java的第240行
那一行使用的資料有null...


reply to postreply to post
作者 Re:餐廳管理系統_已debug檢查過但還是出現錯誤 java.lang.NullPointerException [Re:ynchang]
Peter830829





發文: 19
積分: 0
於 2018-06-19 13:04 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
好的我在抓看看~

謝謝


reply to postreply to post
» JWorld@TW »  Java 新手區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8