上一篇是
ChatGPT
针对以下问题:
我有一组资料: 1=满福堡餐、2=猪肉满福堡餐、3=猪肉满福堡加蛋餐、4=无敌猪肉满福堡加蛋餐、5=青蔬满福堡餐。当使用者输入1时,印出『您好,请问您点的是满福堡餐吗?』输入2时,印出『您好,请问您点的是猪肉满福堡餐吗?』输入3时,印出『您好,请问您点的是猪肉满福堡加蛋餐吗?』输入4时,印出『您好,请问您点的是无敌猪肉满福堡加蛋餐吗?』输入5时,印出『您好,请问您点的是青蔬满福堡餐吗?』
所给出的Java程式解决方案。
有兴趣回顾的话,可以参考:前情提要
本篇分享下我自己对于相同问题给出的Java程式解决方案。我的程式码包含两个部分:一个是业务逻辑的处理程式,另一个则是资料面向的程式。
业务逻辑程式码:
import java.util.Scanner;public class MyDemo { public static void main(String[] args) { MyData data = new MyData(); Scanner scanner = new Scanner(System.in); System.out.print("请输入您要点的餐点编号:"); int input = scanner.nextInt(); if (input > data.menu.size()-1 || input <=0) System.out.println(data.menu.get(0) + "1~" + (data.menu.size()-1) + "。"); else System.out.println("您好,请问您点的是" + data.menu.get(input) + "吗?"); }}
资料程式码:
import java.util.ArrayList;public class MyData { public ArrayList<String> menu; MyData () { menu = new ArrayList<String>(); menu.add("您的点餐号不存在,请重新输入餐号"); menu.add("满福堡餐"); menu.add("猪肉满福堡餐"); menu.add("猪肉满福堡加蛋餐"); menu.add("无敌猪肉满福堡加蛋餐"); menu.add("青蔬满福堡餐"); //menu.add(""); }}
执行结果如下:
执行结果与ChatGPT
的执行结果大同小异,满足题目给定的需求。
分析一下自己的设计理念与
ChatGPT
最大的差异在于这段描述:『我有一组资料: 1=满福堡餐、2=猪肉满福堡餐、3=猪肉满福堡加蛋餐、4=无敌猪肉满福堡加蛋餐、5=青蔬满福堡餐』中,我是将餐点看成资料的一部分,而ChatGPT
则是将这段描述当成是业务逻辑的一部分。ChatGPT
将1=满福堡餐、2=猪肉满福堡餐...等资料放在switch
的结果,就是当main方法
结束后,这些资料就消失了。
反观我的设计切出一个MyData
类别,这些资料未来则可以被其他要开发的功能给呼叫使用。最具体的影响就是当这些资料要被放进资料库(例如:MySQL)而需要改写重构时,直接针对MyData
这个类别进行重构即可。值得一提的是,MyData
类别中,刻意选用ArrayList
来储存资料的原因,也是因为这是与资料库互转资料常用的类别。
更直观的优点,当加入新资料时,我提供的解决方案只需要在MyData
的程式区段中,将注解的部分修改为
menu.add("鬆饼餐");
一切就修正完毕了。业务逻辑的部份完全不需要调整。
执行结果如下:
分析完可扩展性、可维护性的面向后,接着来看一下程式码的精简度。
ChatGPT
的BurgerOrder.java,未添加6=鬆饼餐时,就有29行了。
反观我的程式码,MyData.java还是包含6=鬆饼餐,两段加起来也才14+13=27行。
ChatGPT
的评鉴报告:
不过AI强大的地方在于越多人餵它资料,日后给出的答案会更好。现在的
ChatGPT
无法胜任资深Java程式设计师只是在2023年3月我测试评鉴的当下无法,1年后甚至是10年后就难说了。