程序员如何才能写出优秀的代码

1、写每个程序都是为了解决某个问题,你应该去思考我该怎样去解决这问题,而不是急于 的去考虑我程序到底怎么写、怎么去实现,往往有些同学他动手最快,写得很积极,但他不 一定是写的最好的,也不一定是最快写出程序的人。所以当你遇到问题的时候,你需要不断 的去思考,去想我怎样去解决这问题,JAVA语言体现的是一种思想,这种思想得经过很长 时间去磨炼、去体会的,不是一天两天就能理解的。

2、比如最简单的例子:1+1等于多少?这个程序那么你就应该去思考我在现实生活中怎样去做这个题?那么这个题很简单,在纸上直接写上2就OK了。那么在程序中要怎样去写呢? 这个题用程序写的话太简单了,你会马上有思路了,知道该怎样去实现。如下: 实现一:

public static void main(String[] args)

{

System.out.println(1+1);

}

实现二:

public static void main(String[] args){

int a = Intger.parseInt(args[0]) //参数String类型转换成int类型

int b = Intger.parseInt(args[1])

System.out.println(a+b); }

第一个程序实现了我们想要的功能,能算出1+1=2,这已经达到了我们的目标。但是这个程序有他的缺点,这个程序只能算1+1,那么我想算1+2呢?很显然只能在加一行System.out.println(1+2);,那么这样的话就改变了程序的结构。程序没有任何的扩展性,说白了这个程序没有任何的价值。可是优点是简单,最简单的实现了功能。

第二个程序同样实现了功能,但相对于第一个程序,第二个程序显得更加的强大,不紧紧能算出1+1,能算出任何两个数的相加。那么这个程序就很灵活,具有可扩展性。缺点是稍显复杂。

总结:其实对于初学者来说只要能实现第一种方式就可以了,不管什么问题只要能解决就OK。那么怎样能一下就想到第二种方式呢,这个得需要时间去积累,不断的去审视代码,要深入理解和体会面向对象的思想。

3、写一个程序打印以下这些数。

1 10 100 1000

2 20 200 2000

3 30 300 3000

4 40 400 4000

5 50 500 5000

这个程序要比1+1的题要复杂的多,但是当你实在是想不出怎样去写,没有一点思路的时候,那该怎么办呢?我建议可以这样,先可以不要想着我一下就实现了功能,我能不能先把第一行打印出来呢?如果第一行都不会怎打印出来,我建议就可以看看老师写好的程序或者同学的程序是怎么实现的,如果你自已知道怎么打印第一行如下:

实现一:

public static void main(String[] args)

{

System.out.println(1+” ”+10+” ”+100+” ”+1000);

}

OK这样最简单的打印出来了,那么是否可行呢,很明显肯定不能这样写。因为你偏离了题的意思,如果这样打印出来,还不如全打印出来呢,打印出5行数据。这样肯定不行,写跑题了。

实现二:

public static void main(String[] args)

{

for(int i=1;i<5;i++)

{

System.out.print(i);

}

//打印出1 2 3 4

}

思考:这虽然打印出一行数据了,但不是我想要的结果,这个时候就得需要思考了。去找规律了,发现除了第一个数每个数是前一个数的10倍,那好了我每次打印的时候去乘以10。

实现三(改进):

public static void main(String[] args)

{

for(int i=1;i<5;i++)

{

System.out.print(i*10);

}

//打印出10 20 30 40

}

思考:这个结果还不是我想要的,是乘以10了,但是结果是我循环i的值,每个数的10,而不是前面的数的10倍,也就是说我想要的是第一行,都是以1为单位的10倍数,如:1*10,10*10,100*10,而不是20或者30什么的。但是怎么解决这问题,因为i的值是不断变化的,不可能总是1。那么如果我不用i的值(这个for循环我只是用来控制输出几例数据),我可以定义一个变量来等于1。

实现四(改进):

public static void main(String[] args)

{ int num=1;

for(int i=1;i<5;i++)

{

num=num*10;//因为当前的值是前面的值的10倍,所以要把前面计算出的值存起来。 System.out.print(num);

}

//打印出10 100 1000 10000

}

思考:越来越接进想要的结果了,但是这个结果还是不行,因为是从10开始打印的,而不是从1开始,那么也就是说,当i=1的时候说明是要打印第一例的数,发现一个规律第一例的数是不需要乘以10的,所以要判断一下。

实现四(改进):

public static void main(String[] args)

{

int num=1;

for(int i=1;i<5;i++){ if(i == 1)

{

System.out.print(num);

}

else

{

num=num*10; System.out.print(num);

}

}

//打印出1 10 100 1000

}

思考:终于第一目标实现了,打印出我想要的第一行数据,但是整个题的目标是打印5行而不是1行,那么还得去找规律,第一行数据是以1(num =1)为单位的,依此类推第二行就是以2为单位为的,也就是当num的值等于2的时候就会出现第二行的数据,那这个数是总是变化的并且是累加的,所以外面在套个循环就可以解决这问题。

实现五:

public static void main(String[] args)

{

for(int j=1;j<6;j++)

{

int num=j;

for(int i=1;i<5;i++)

{

if(i == 1)

{

System.out.print(num+” ”);

}

else

{

num=num*10; System.out.print(num++” ”));

}

}

System.out.println(); }

/*打印出

1 10 100 1000

2 20 200 2000

3 30 300 3000

4 40 400 4000

5 50 500 5000*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值