今天是加入黑马群的第二天,看了毕向东老师的教学视频。
对于毕老师的编程思想概念的提出感觉很是收益。
编程思想到底是什么呢?
生活中我们要思考,人生中我们会感悟,学习中我也会领悟。这一切的一切都要源
于,我们对万事万物的思索,也就是我们人类特有的思想了。有想就有做,我们思考的
目的无非就是实践。生活中思考让我们能够生存,人生中感悟使我们认识自我,学习中
领悟我们得到知识。久而久之,我们形成了一种惯性,比如说:“饿了就要吃饭”,“
冷了就要穿衣”,“孝敬父母”,“要做对社会有用的人”,“技不压身,能者多得”
,“知识就是财富”等等。这些通用的哲理看似都很简单,但其实这就是思想,也就是
我们刚说的一种惯性。
这样来讲,在编程学习过程中,我们也是在逐渐培养自己的编程思想,形成惯性。
久而久之,也对程序语言的理解更加深入透彻。
我们知道在JAVA中有很多的组成元素,这些不同的元素又各具功能。又这些不同的
元素组成的复杂集合,往往刚接触看的头疼不已。就算有一定基础的朋友,在碰到已经
成型的项目源码可能也会一头雾水,一时半会看不出什么门道,更别说要自己写或者自
己设计了。我们学习JAVA基础,也就是要认识这些构成JAVA的基本元素,以及他们的基
本应用。可是我们要提高自己的JAVA水平,那就要对这些基本元素的应用收悉的不能在
收悉,也就是要培养自己的编程思想。
哪如何培养自己的编程思想呢?
我在学习JAVA的时候也是零基础开始的,以前听到编程俩个字感觉很神秘,觉得编
写程序应该是一门很高深的学问,可刚接触JAVA的时候已经有一些C和C++的语言基础,
觉得JAVA也就那样,不是很难。可后来慢慢接触到类,对象,抽象类,接口,封装这些
等等的概念之后,一下迷糊了。可是又不甘心,所以拼命钻研,可是越学越迷糊,越钻
研问题越多。一度差点又放弃的念头,可是经过不断的联系过程中,翻来覆去的做例子
。不知不觉的发现,问题都明了了,思绪也逐渐清晰了。以前都没有想过这些问题。今
天看来毕老师的视频,学习到编程思想的概念后,才发现当时自己在逐渐形成了JAVA的
编程思想,所以算是入门了。
总结了一下,该如何培养编程思想呢。
首先,我们要有一个扎实的理论基础。对于JAVA中得各种元素的定义,概念的理解
。可以更便于我们对其应用。
其次,要进行充足的实例操作。对每种元素的应用,我们可以通过各种实例来揭示
它的原理,并发现自己对其在某些方面掌握的不足,可以总结发现自己的问题所在。
再次,善于总结。元素都是死的,而我们应用的过程却是活得。
最后,发挥创造,举一反三。把不同的实例,可以结合在一起形成新的逻辑关系。
暂时只能总结这么多,慢慢在学习中在总结吧。欢迎其他的朋友可以给于进一步的
补充。
附上几个程序思想的例子:
累加和计数器:
累加运算和COUNT计数器
public class numTest {
static int[] num=new int[100];
static int count=0;
static int sum=0;
public static void main(String[] args) {
//初始化数组
for (int i=1;i<=100;i++)
{
num[count]=i;
count++;
sum+=num[count];
}
System.out.println("从1到100的整数和为:"+sum);
System.out.println("相加了多少次:"+count);
}
}
排序:
public class numTest1 {
static int[] num={4,9,16,2,7,54,33,40,55,20};
public static void main(String[] args) {
for (int i=0;i<10;i++)
{
int temp=0;
if (i<=8)
{
if (num[i]>num[i+1])
{
temp=num[i+1];
num[i+1]=num[i];
num[i]=temp;
}
}
System.out.println("数组正序排列:"+num[i]);
}
}
}
递归:
public boolean check(int x,int y)
{
if (x>y)
return true;
return false;
}
public boolean checkAngin(int a,int b)
{
if (a<100)
return check(a+3,b+5);
if (b<50)
return check(a+5,b+3);
}
在付一个递归的例子:(扫雷游戏的递归逻辑)
public int checkAgein(int r1, int c1)
{
int num = 0; //记录周围雷数
//判断是否有左上
if (r1-1>=0 && c1-1>=0)
{
if (map[r1-1][c1-1]==20)//判断左上是否有雷
{
num++;
}
}
if (r1-1>=0)//判断上
{
if (map[r1-1][c1]==20)
num++;
}
if (r1-1>=0 && c1+1 <= 11)//右上
{
if (map[r1-1][c1+1]== 20)
num++;
}
if (c1-1>=0)//左
{
if (map[r1][c1-1]==20)
num++;
}
if (c1+1<=11)//右
{
if (map[r1][c1+1]==20)
num++;
}
if (r1+1<=11 && c1-1>=0)//左下
{
if (map[r1+1][c1-1]==20)
num++;
}
if (r1+1<=11)// 下
{
if (map[r1+1][c1]==20)
num++;
}
if (r1+1<=11 && c1+1 <=11)//右下
{
if (map[r1+1][c1+1]==20)
num++;
}
return num;
}
public void check(int r , int c)
{
//碰撞检测
if (map[r][c]==20)
{
gameOver = true;
}
else {
//判断周围是否有雷和雷数
int number = checkAgein(r, c);
if (number>0)//这点周围有雷
{
//有雷就要在这点显示周围的雷数
map[r][c]= number;
}
else //如果这点周围没有雷
{
map[r][c]=14; //逻辑上认为该点没雷 下次递归不再轮到该点 翻开该点
//判断该点周围的情况
//左上
if (r-1>=0 && c-1 >=0)
{
if (map[r-1][c-1]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r-1,c-1);//如果该点没有被翻开 就继续检查该点
}
//上
if (r-1>=0)
{
if (map[r-1][c]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r-1,c);//如果该点没有被翻开 就继续检查该点
}
//右上
if (r-1>=0 && c+1 <= 11)
{
if (map[r-1][c+1]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r-1,c+1);//如果该点没有被翻开 就继续检查该点
}
//左
if (c-1 >=0)
{
if (map[r][c-1]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r,c-1);//如果该点没有被翻开 就继续检查该点
}
//右
if (c+1 <=11)
{
if (map[r][c+1]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r,c+1);//如果该点没有被翻开 就继续检查该点
}
//左下
if (r+1<=11 && c-1 >=0)
{
if (map[r+1][c-1]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r+1,c-1);//如果该点没有被翻开 就继续检查该点
}
//下
if (r+1<=11)
{
if (map[r+1][c]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r+1,c);//如果该点没有被翻开 就继续检查该点
}
//右下
if (r+1<=11 && c+1 <=11)
{
if (map[r+1][c+1]<14)// 判断该点是否被翻开 即该点周围也没有雷
check(r+1,c+1);//如果该点没有被翻开 就继续检查该点
}
}
}
}