首页 > 其他分享 >题目集1~3的总结性Blog

题目集1~3的总结性Blog

时间:2023-04-01 15:37:15浏览次数:32  
标签:语句 总结性 题目 int price Blog Dish new public

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

相关文章

  • 钟7权BLOG1
    前言:总结三次作业的知识点,内容,难度。 显而易见,此三次的PTA作业所考察的知识点以及难度呈现不断变大的趋势。PTA1作业难度简单,虽然题目量是最多的,但却是最简单的,是我三个题目里面唯一一次全对的,PTA2比PTA1难度有较大的提升,知识点从PTA1的循环结构直接变成了数组和面向对象,当然里......
  • 第一次博客:PTA题目集1-3总结
    第一次博客:PTA题目集1-3总结前言:JAVA是一门非常好的语言,因其面向对象的思想,在解决问题时思路与上学期学习的C语言截然不同,但是其优势也是显然易见的,特别是在写大型程序时其面向对象的思想,可以让人思路清晰。 这次PTA中三个“菜单计价”的题目......
  • BLOG-1
     (1) 前言:第一次作业:第一次作业的七道题相对来说比较基础,因为这是我们第一次写关于Java的代码,现在回看第一次作业,虽然比较基础,但是对于我来说,第一次作业是学到了比较多的东西的,我也记了一些笔记比如:1..next()和.nextLine()的区别:.next()如果输入了一串字符,到了有空格的时候就......
  • 博客系统——VBLOG_项目工程框架搭建
    VBLOG_项目工程框架搭建一、架构设计采用前后端分离架构设计:api:后端接口服务golang开发的restful接口使用mysql做数据存储web:vue3前端框架前端框架:vue3,vue-routerui组件:arco.design(头条开源组件库)二、接口设计2.1、管理员2.1.1、文章上传接口......
  • 题目集1~3的总结性Blog
    一、前言本学期开展了面向对象程序设计这门课程,开始了Java语言的学习。目前,我们已完成三次pta大作业,让我收获了很多,慢慢从上个学期C语言面向过程的编程思想转变为面向对象程序设计的思想。现对三次作业做概括分析:1.第一次作业二、设计与分析1.第一次作业共九道题目,难度一般,均......
  • 【LBLD】双指针技巧秒杀七道数组题目
    【LBLD】双指针技巧秒杀七道数组题目快慢指针技巧classSolution{public:intremoveDuplicates(vector<int>&nums){intfast=0;intslow=0;while(fast<nums.size()){if(nums.at(fast)!=nums.at(slow)){......
  • 总结三次题目集的知识点、题量、难度等情况
    前言:题目集1是Java入门,大至涵盖了Java的几种基本语言结构,如循环,选择,数组。与c语言大致相似,上手较容易。但是题目难度不低,7-10GPS数据处理,不仅题目长难以理解,对有难度的字符串要求掌握熟练,输出要考虑的情况也很多,题目也达12题之多。其他题目在c语言里写过近似一模一样的题,写这个题......
  • 2021 年蓝桥杯第一次省赛题目全解答
    做题链接:A组B组C组填空题卡片直接模拟。展开代码#include<bits/stdc++.h>usingll=longlong;intmain(){std::cin.tie(nullptr)->sync_with_stdio(f......
  • weblogic-SSRF
    Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。1、启动环境 访问`http://your-ip:7001/uddiexplorer/`,无需登......
  • C语言之PTA刷题(基础编程题目集_函数题)
    本题要求实现一个函数,对给定的正整数N,打印从1到N的全部正整数。#include<stdio.h>voidPrintN(intN);intmain(){intN;scanf("%d",&N);Pr......