1、前言:
前三次题目集主要涉及到java的编程基础知识和有关类的简单知识。
(1)其中涉及了Java中的面向对象编程、控制语句、输入输出流、类和对象等基础知识点。具体包括类的定义、构造函数、成员变量和成员方法、访问权限修饰符、条件语句、循环语句、Scanner类的使用、System.out.println()的使用等。同时也涉及到如何设计游戏逻辑,如何判断游戏是否结束以及输赢的判定等算法问题。
控制语句:控制语句用于控制程序的执行流程,包括条件语句和循环语句。
条件语句包括if-else语句和switch语句,它们用于根据不同的条件执行不同的代码块。在上述代码中,使用if-else语句来判断玩家的选择并执行相应的操作。
循环语句包括for循环、while循环和do-while循环,它们用于重复执行一段代码块直到满足某个条件为止。在上述代码中,使用while循环来不断接收用户输入并执行游戏操作,直至游戏结束。
输入输出流:Java提供了大量的输入输出流类,用于读取和写入不同类型的数据。其中最常用的是System.out和Scanner类。
System.out.println()用于向控制台输出字符串,可以在调试代码时输出一些信息,也可以用于提示用户输入。
Scanner类用于获取控制台输入,可以读取整数、浮点数、字符串等不同类型的数据。在上述代码中,使用Scanner类获取用户输入的选择。
类与对象:类是Java中面向对象编程的基本单位,它定义了一组数据成员和成员方法,并封装了对这些成员的访问。通过定义不同的类,可以创建多个对象来模拟现实生活中的各种场景。每个类都有自己的成员变量和成员方法,代表着该类的各种特性和行为。
访问权限修饰符:访问权限修饰符用于控制类、成员变量和成员方法的访问权限。Java中共有四种访问权限修饰符:public、protected、default、private。
public表示公共的,可以被任何类访问。
private表示私有的,只能在当前类中被访问。在上述代码中,每个角色或物品的类中都定义了一些私有成员变量和方法,protected表示受保护的,可以被当前类和其子类访问。default表示默认的,即不加修饰符时的访问权限,可以被同一个包中的其他类访问
构造函数:构造函数是一种特殊类型的方法,用于初始化新创建的对象。在Java中,构造函数的名称必须与类名相同,没有返回值类型,并且可以有多个重载版本。
2设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析菜单计价系列题目,即题目集2的7-1、7-2以及题目集3的7-1
(1)7-1
由于本题我没有得满分,按照为的代码绘制的类图为
源代码为:
import java.util.*;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Menu menu = new Menu();//先创建菜单并添加一些菜品
menu.addDish(new Dish("西红柿炒蛋", 15, 23, 30));
menu.addDish(new Dish("清炒土豆丝", 12, 18, 24));
menu.addDish(new Dish("麻婆豆腐", 12, 18, 24));
menu.addDish(new Dish("油淋生菜", 9, 14, 18));
Order order = new Order();//创建新订单
while (scanner.hasNext()) { //处理输入的点菜记录
String input = scanner.nextLine().trim();
if (input.equals("end")) {
break;
}
String[] parts = input.split(" ");//按照空格将菜名和份数分割
String dishName = parts[0];
int portion = Integer.parseInt(parts[1]);//parseInt()将字符串表示的整数转化为对应的整数类型
Dish dish = menu.searchDish(dishName);//检查菜单中是否有该菜品
if (dish == null) {
System.out.println(dishName + " does not exist");
} else {
order.addRecord(dish, portion);//将点菜记录添加到订单
}
}
int totalPrice = order.getTotalPrice();//计算订单总价并输出
if (totalPrice == -1) {
System.out.println("** does not exist");
} else {
System.out.println(totalPrice);
}
}
}
class Dish {
private String name;
private int unit_price;
public Dish(String name, int unit_price) {
this.name = name;
this.unit_price = unit_price;
}
public String getName() {
return name;
}
public int getPrice(int portion) {
double price = 0;
if (portion == 1) {
price = unit_price;
} else if (portion == 2) {
price = unit_price * 1.5;
} else if (portion == 3) {
price = unit_price * 2;
}
return (int) Math.round(price); //四舍五入取整
}
}
class Menu {
private Dish[] dishs;
public Menu() {
dishs = new Dish[4];
dishs[0] = new Dish("西红柿炒蛋", 15);
dishs[1] = new Dish("清炒土豆丝", 12);
dishs[2] = new Dish("麻婆豆腐", 12);
dishs[3] = new Dish("油淋生菜", 9);
}
public Dish searchDish(String dishName) {
for (Dish dish : dishs) {
if (dish.getName().equals(dishName)) {
return dish;
}
}
return null;
}
}
class Order {
private String dishName;
private int portion;
public Order(String dishName, int portion) {
this.dishName = dishName;
this.portion = portion;
}
public String getDishName() {
return dishName;
}
public int getPortion() {
return portion;
}
}
class OrderList
{
private List<Order> orders;
private Menu menu;
public OrderList()
{
orders = new ArrayList<>();
menu = new Menu();
}
public void addOrder(Order order)
{
orders.add(order);
}
public int totalPrice()
{
int totalPrice = 0;
for (Order order : orders)
{
Dish dish = menu.searchDish(order.getDishName());
if (dish != null)
{
int price = dish.getPrice(order.getPortion());
totalPrice += price;
}
}
return totalPrice;
}
}
3采坑心得:
对于以上代码在最初写的时候其中有很多我不能解决的语法错误和逻辑错误等,原因是我对方法的调用和传参方式不熟练,其中主要包括不理解方法的返回值类型、参数列表、方法体等概念,不能够正确地使用方法调用和传参。总的来说就是自己对Java语法的学习滞后与每次的大作业,导致了对于题目的陌生。
所以经过了后续的学习我对7-1进行了分析得出了以下几个问题;
(1)Dish 类定义时只考虑了每个菜品的名称和单价,但是在 main() 方法中创建 Dish 对象时增加了两个参数,分别是小份和大份的价格。这会导致添加的每个 Dish 对象都缺少小份和大份价格信息,而这些价格信息在计算订单总价时是必需的。
(2)菜单 Menu 类中 searchDish() 方法实现较为简单,只是遍历菜单列表查找指定菜品。在菜品很多的情况下,这种查询方式效率较低。可以使用 HashMap 或 TreeMap 等集合类来存储菜单,以提高查询效率。
(3)Order 类表示订购记录,但是它只包含菜品名称和份数,没有任何与订单有关的信息,如订餐时间、预计送达时间等等。如果需要完整的订单信息,可以添加相应的字段或另外定义一个 OrderInfo 类来存储。
(4)OrderList 类似于 Order 的列表,用于存储所有订单。但是它与 Menu 类之间存在耦合,即在构造函数里初始化了 Menu 对象。而且由于该类没有暴露出与其它类交互的公共接口,也就无法在其它地方实例化该类对象并添加订单。可以将初始化菜单和添加订单的操作分离出来,并添加相应的公共方法来实现与其它类的交互。
4改进建议:
给自己建议或者要求就是
1理解类和对象的概念。需要了解类是一种数据类型,用于描述具有相同属性和行为的事物。而对象则是类的实例,具有独特的状态和行为。
2熟悉 Java 的基本语法和面向对象编程的思想。如基本数据类型、变量、运算符、条件语句、循环语句、方法、类、继承、封装、多态等等。
3掌握常用的集合类和输入输出流。例如 ArrayList、Scanner 等。
4理解方法的调用和传参方式。需要理解方法的返回值类型、参数列表、方法体等概念,并能够正确地使用方法调用和传参。
5解决代码中的错误和异常。在编写代码时难免会出现各种错误和异常,如语法错误、逻辑错误、空指针异常等等。要学会查看错误信息,找出错误原因并进行修复。
6合理地组织代码结构和命名规范。在编写代码时应该考虑代码的可读性和可维护性,通过合理地组织代码结构和采用良好的命名规范来提高代码质量。
5总结:对本阶段三次题目集的综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见。
前三次题目集主要还是前八章的基础知识,有的题目也涉及了多个类,从这些题目中获得了简单的练习。以上所有的提到的知识点都需要进一步学习和研究,我掌握的都不太好。包括条件判断,循环,涉及类的简单知识等。同时也让我从中得到了正确学习语法的方法,自己对Java语法的学习应该提前与作业的布置,并在每次的作业中都有所得。慢慢积累每一个小的知识点。
标签:语句,总结性,题目,int,price,Blog,Dish,new,public From: https://www.cnblogs.com/zzh424/p/17278668.html