147
社区成员




注: 因在实验报告中已详细对相关知识点进行了总结, 因此不再赘述, 下文是自己对编程知识的一些理解, 有错请谅解. 在复习时, 会结合实验报告与此次总结进行综合复习.
1.梳理总结所学内容
1.1 java编程思想:
java是面向对象的语言, 其核心在于熟悉掌握面向对象与面向接口编程思想. 在学习面向对象编程时, 其实也是在学习自我认知世界的一种方式. 面向对象, 即将所进行的操作对应于每一类事物, 操作时相应于事物而非过程. 其有三大特性: 封装性, 继承性, 多态性.
封装性: 即将事物本身的特性与本身可具备的操作封装为其自身的一个整体, 这既符合我们在现实中对万物认知过程中事物本身反映的真实呈现, 也在进行事物间交互时, 将整体作为对象进行交互,而非零散的底层数据, 体现了在更高层次上对事物间联系的操作的思想.
继承性: 这一特性体现了事物间存在着共同意志, 且各自同时也具备着属于自身的个体意志, 此种特性建立在封装性的基础上. 在继承共同意志的同时, 自身也有着各自的特性, 这在编程中减少了重复代码的编写, 也能展现事物本身的特性, 保证了其对象性, 同时也在更深层次中反映了事物间的联系.
多态性: 即是同一事物在不同存在关系中展现的不同存在形态, 此种特性是以继承性为基础的. 只有同类事物间具有共同意志, 才能展现出其在不同关系中的不同的存在形态. 这是事物在现实中存在形式变化的深刻体现. 而这也深刻地反映了事物存在具有统一性. 事物存在所展现的不同形态是基于一个最基本, 最共同的一个存在形式而产生的. 由于这种统一性, 在编程时, 可直接根据最基本的存在形式进行实例化, 以统一的风格编写程序, 可降低日后的维护难度.
1.2程序结构:
在编写程序的过程中, 根据操作间的逻辑关系, 可将程序执行的执行逻辑分为顺序执行, 分支执行, 循环执行.
顺序执行: 即依照代码的编写顺序由上往下执行. 程序中最一般的执行逻辑.
分支执行: 其内部实现逻辑为先进行逻辑判断, 若符合, 则执行其中操作; 若不符合, 则执行其他操作. 其内涵着程序执行的选择性, 根据判断是否符合执行条件进而判别是否选择执行. 可用于具有选择性的逻辑执行中.
循环执行: 其内部实现逻辑为进行逻辑判断, 满足条件则执行, 循环变量随之变化, 当不满足条件时, 循环执行结束. 可用于对某一操作重复性执行的逻辑执行中.
总结: 所有程序的逻辑执行基本就这三种, 而算法的设计基本也只需要这三种程序结构,
其就能写出几乎全部的算法. 而在编程中很重要的一点是, 如何根据需求适当选择所需程序
执行逻辑, 这是程序设计的基本骨架之一.
1.3数据类型与表达式
现实中表达的数字, 文字, 图像, 声音等在计算机中都以二进制的形式进行数据存储,
而编写程序的过程, 实则为编写存储数据并对数据进行操作的过程. 这一过程中, 首先就需要对不同类型的数据进行存储. 由此, 根据数据本身的存储特性, 数据可分为基本数据类型与引用数据类型, 前者存储一具体值, 后者存储一引用.
基本数据类型: 整型, 浮点型, 布尔型, 字符型 (各自有其封装好的包装类)
表达式: 对数据进行操作的一个小单位. 在进行对某一问题进行分析与进行数学计算时, 将会用到运算符与数据组合而成的表达式, 用来表达问题运算的逻辑关系, 从而通过表达式计算出结果或表达出其逻辑关系.
引用数据类型: 数组, String类型, 对象, 类
1.4 数组
数组是一种数据结构, 即一种管理与储存数据的形式. 其中可存储基本数据类型和引用数据类型. 可进行静态初始化赋值与动态初始化赋值, 但不能在操作过程中进行扩容, 即一旦确定了其数组长度, 无论静态或动态赋值, 数组本身的长度无法再改变. 根据数组存储的内容, 分为一维数组与多维数组. 数组的一大特性表现在数据存储时有其位置的对应, 从而可利用索引对其进行相关操作.
数组的一般特性操作有: 对数组进行遍历; 对数组中元素进行排序; 查找目标元素; 寻找数组中元素的最值等. 以上操作因需在数组中每个位置进行反复操作, 则需选用循环结构进行逻辑实现.
有了对数据的整体存储, 则相应地也能够进行对数组元素的复制利用. 根据其复制原理的不同, 分为浅拷贝与深拷贝.
数组的内存实现原理:
数组变量是一个引用变量,通常被存储在栈内存中. 在数组初始化后,数组对象被存储在堆内存中的连续内存空间, 而数组变量存储了数组对象的首地址, 指向堆内存中的数组对象.
1.5 类与方法
类, 一种自定义的引用数据类型. 事物间实现交互的基本单位.
其内部内涵为: 将事物本身的特性与其可进行的操作封装于类中, 事物间交互时可以类为单位进行, 这一在更高层次上对数据的操作, 体现了面向对象思想中的封装性, 则类即为封装形成的这一整体. 而类与类之间其中之一的关系为继承关系. 子类从父类中继承两者的共同意志的同时, 自身可定义属于自己的个体意志. 这体现了面向对象思想中的继承性. 而java中规定, 类只可单继承与多层继承, 从而形成一个整体的继承体系. 在继承的基础上, 同一对象有着不同的存在形态, 可相应于父类中不同的子类. 这体现了面向对象思想中的多态性. 由此, 在这种统一性中, 可根据父类的共同意志实例化子类的对象, 意义在于处理种类繁多的已存在的类及相关类.
由目前所学,根据不同的功能实现, 类有常见的几种类型:
javaBeen类: 描述一类事物, 封装其特性与其具备的操作
Text类: 内有main方法, 用于对javaBeen类的测试
工具类: 不描述事物, 封装普遍性的操作
抽象类: 可内含不具有具体方法体的抽象方法, 用于统一子类的方法重写
类与对象的关系: 类是对于对象的抽象, 对象是类的具体实现, 定义类本身不占用内存, 也不会有任何操作, 只有实例化出对象才真正具有操作意义.
方法, 封装事物具有的操作的最小实现单位.
1.6总结:
编程, 意为编写程序. 如何编写, 则需有对其的一个总体性思路, 由思想指导行为.
现在所学的是java编程基础, 但仅仅是基础, 知识就已经在紧密的联系之中. 就目前所学而言, 个人想要编写出一个相对完整的程序, 则需清楚这个程序的整体框架, 如: 针对需解决的问题, 是否需要创建新的类, 定义其中属性与方法, 进行实现; 整体的实现逻辑如何, 应选择何种程序结构进行实现; 所操作的数据类型为何, 是否需要应用某种数据结构对其进行存储与管理, 以达到目标的逻辑实现; 亦或是经过分析, 需要综合运用以上所有, 进行整体实现. 在编程过程中, 最重要的便是明确自己的整体实现思路, 实现的方法有多种, 选择最优的进行实现. 这种整体性, 系统性思维是必须要具备的, 无论做任何事.
而在整个网络世界中, 需要学习的太多太多, 唯有将其中千丝万缕的联系理清楚, 才能看清网络世界的真面目. 此后我也将会逐步摸索与理解这偌大的网络与现实世界, 形成我自己对世界的独特理解, 运用于编程之中.
注: 具体知识点在实验报告中已详细分析与阐述, 此次撰写总结的目的在于整理自己学习编程的思路与思想总结, 这对我来说才有意义.
2.PTA实践总结
选择不少于两个程序示例进行说明,需要发布源代码、测试用例。
谈一下在线刷题的个人感受。
2.1示例1
7-4 判断一个数是否为回文数
如果一个数与它的反转数相等,则该数为回文数。输入一个数,判断是否为回文数。
输入一个数
若XX是回文数,则输出“XX 是回文数”,若不是,则输出“XX 不是回文数”
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String str1 = num + "";
// String str1 = Integer.toString(num);
// String str1 = String.valueOf(num);
StringBuilder str2 = new StringBuilder(str1);
str2.reverse();
int count = 0;
for (int i = 0; i < str1.length(); i++) {
if (str1.charAt(i) != str2.charAt(i)) {
System.out.println(str1 + " 不是回文数");
break;
} else {
count++;
}
}
if (count == str1.length()) {
System.out.println(str1 + " 是回文数");
}
sc.close();
}
}
6234326
6234326 是回文数
2.2示例2
7-2 去掉重复的数据
在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,去掉所有重复的数字。最后按照输入顺序输出没有重复数字的数据。所有重复的数字只保留第一次出现的那份。
你的程序首先会读到一个正整数 n,1≤n≤100000。
然后是 n 个整数,这些整数的范围是 [1, 100000]。
在一行中按照输入顺序输出去除重复之后的数据。每两个数据之间有一个空格,行首尾不得有多余空格。
5
1 2 2 1 4
1 2 4
感受: 没有特别的感受, 增加了实践机会, 更有利于同学们对编程学习的理解与运用
2.3在线评测系统使用感受
增加了同学们实践的机会, 锻炼了同学们在实践过程中发现问题并独立寻找解决问题的方法的能力, 但由于实践过少与一开始的不适应, 一些细节上的问题层出不穷, 在检测出答案错误时, 系统所给的测评结论由于欠缺具体性而往往不具备实际意义, 同学们也很难发现自己的问题究竟出在了哪里, 在这一点上会消耗同学们的不少精力与时间, 在这一点上希望改进.
3. 改进学习方法、措施落实情况(内容可扩展,至少包括以下项)
3.1 除课堂外,遇到不会的问题时会到哪个平台搜索
CSDN, bilibili
3.2 根据记录2个月的每天代码时长,利用excel绘制统计表
国庆后无记录代码时长, 但投入到实践的时间很少, 主要用于玩乐
3.3 感觉个人的哪些方法还存在不足?哪些方面需要改进?
将大量时间与精力花费在玩乐上, 没能做到每天保证一定量的实践时间. 学习的热情有待提高, 控制好娱乐的时间, 将更多时间与精力放在学习上
4. 你知道csdn么,结合使用情况表述他的优点与不足
优点: 很好的一个社区交流平台, 有不懂的问题基本都可以找到相关的解答
不足: 观感混乱
4.1 csdn给你的直观感受是什么?
专业, 直接, 有一定权威性, 许多题目都提供源代码并进行解读,编写时也会加一些注释方便读者理解
4.2 csdn你感觉最不舒服的地方是什么?
观感混乱
4.3 你还利用了哪些平台学习编程知识,他们是哪些网站或资源,优点是什么?
b站, 有许多不同的学习资源可供选择, 选择适合自己的, 并且可进行较为系统的学习.
5. 你认为影响你学习编程的主要阻力是什么?如何克服!
时间分配不足, 花费大量时间在娱乐上, 如游戏, 漫画等. 今后将把时间控制好, 把握学习时间, 在最短的时间里做高效的学习与对知识的理解和掌握, 保证每天的实践时间, 在实践中发现问题,解决问题,总结思路.
6.其它(针对课程的学习,请发挥)
老师上课所讲的内容是根据书本章节安排进行的, 所讲解内容都是关于具体知识点而设置的, 讲得清晰详细不可否认, 但缺乏知识点间的联系的讲解, 很多同学在初学编程时, 面对零散的知识是感到迷茫的, 因为没有一个具体实现的学习框架, 并不了解编程较为整体性的一个概念, 以至于无法将各知识点串联理解与吸收, 学习效率低下. 建议老师们可以为同学们进行关于编程思路的整体性分析, 让同学们了解其中的学习框架与知识点间的联系, 如此可更有利于同学们对所学知识的理解与运用. 谢谢.