本文章用于记录在初学Java过程中遇到的各类问题以及解决办法。
最近遇到的问题较少,把一些初学的思路和大家分享一下。
计算机系统:WIN8X64
JDK版本:JDK-7u71-windows-x64
文本编辑器:NOTEPAD++
问题1:阶乘循环算法
问题分析:今天接触到了循环语句,做了一道题,就是5的阶乘(5*4*3*2*1),最开始程序是这么些的int b=1; for(int x=2;x<=5;x++){b *= x;},这样算出来是没有问题的,首先初始化x=2,判断条件x<=5,执行循环体b *= x,执行控制x++,算出的结果是没有问题的,我就考虑可以倒着算么?于是我把程序改成了这样,int b=1; for(int x=5;x==2;x--){b *= x;},结果运行结果是1,于是我把x==2改成了x>=2结果就和之前的一样,于是我又把上面的x<=5改成了x==5,结果也是输出1。这我就有些不理解了,仔细思考后,我是这么认为的,x==5只判断x是否等于5,如果返回值或初始值不等于5而等于其他数字,则会输出false,程序不会继续运行;而x<=5的范围则是4321,如果是4321皆符合条件,则输出true。这就是为什么int b=1; for(int x=5;x==2;x--){b *= x;}输出是1,因为最开始赋值1给b,之后赋值5给x,不符合x==2的条件,所以不会执行b *= x,最终的结果b等于1。为了证实此结论,我将程序改为int b=1; for(int x=5;x==5;x--){b *= x;},程序运行后b的值为5,说明之运行了一次循环。
注意事项:要仔细理解各类符合的用法与概念。
思路分享
今天分享两个思路,一个是水仙花数的筛选,另一个是99乘法表的输出。我个人比较喜欢通过已学的内容,自己分析一些经典的案例,之后再看视频。今天这个水仙花数和99乘法表耗费了一些精力,还是自己完成了这两个题目。
一、JAVA水仙花数的筛选
水仙花数,首先举个例子说明一下他,153=1*1*1+5*5*5+3*3*3,就是一个三位数的各位十位百位的立方之和。题目就是,筛选出100到999中的水仙花数,最开始我考虑的问题就是这道题最难的地方,就是如何选出个位、十位和百位的数字,想了好久都没有想到,突然就想起之前写程序的时候,貌似130除以100的结果是1,我就做了个测试,用130除以100,结果都是输出的果然是1,因为整数相除只能等于整数。所以我就想到了可以用整数相除取余的办法得到个位、十位和百位的数字。首先设置三个变量gewei、shiwei、baiwei,将要判定的数值写到x中,做for循环。程序如下:
baiwei=x/100; shiwei=(x%100)/10; gewei=shiwei%10
for(int x=1;x<1000;x++){if(x=gewei*gewei*gewei+shiwei*shiwei*shiwe+baiwei*baiwei*baiwei){System.out.println("x")} }
二、JAVA九九乘法表输出
九九乘法表这个做起来费了一点时间,首先我忘记了乘法表是啥样了...,上网一查乘法表,我就开始寻找规律,我发现的规律是这样的
11 结果我就不写了,因为只要前两个数能够得到,结果一算就知道了。
21 22 首先是竖排的规律,我设定竖排的第一个数字是a,第二个数字是b。
31 32 33 竖排a的规律是123456789,23456789.....789,78,9。
41 42 43 44 竖排b的规律是,每一排都是一样的。
51 52 53 54 55
61 62 63 64 65 66
71 72 73 74 75 76 77
81 82 83 84 85 86 87 88
91 92 93 94 95 96 97 98 99
我的分析就是,首先要做出这个三角形的图形,之后一次填上数字。作出这个图形不是很难,做一个循环嵌套,嵌套的循环的判断条件是以初级循环的嵌套条件为准。
for(int c=0; c<9;c++){for(int b=0;b<=c;b++){System.out.print((“o”);}
System.out.println();}
程序应该就是上面写的那样,c初始值为0,判断c<9执行嵌套循环体for(int b=0;b<=c;b++){System.out.print((“o”);,b初始值为0,当b<=c时,执行不换行写入System.out.print((“o”),循环结束后执行换行System.out.println()。这样就做出了这个形状:
o
oo
ooo
.....
ooooooooo
之后就是往里面套数值,这个数值的嵌套费了些神。首先我考虑到,竖排的输出数a是逐个递增的,这和排列图形竖排写入应该有些关联。竖排输出数b和在横排是递增的。于是我先定义了两个三个变量x、y、z,输出语句是这样System.out.print((x + "*" + y)+"="+z+" ");
z=x*y。直接上程序解释:
for(int c=0; c<9;c++){ //这个刚才结束过,嵌套循环
for(int b=0;b<=c;b++){
int x=c+1; //列数据写入
int y=b+1; //行数据写入
int z=x*y; //运算结果输出
System.out.print((x + "*" + y)+"="+z+"\t");}
System.out.println();}
今天太累了,实在是写不动了。。。明日再看一遍。
总结
其实很多经典的题目只要用心去想都会想到的,我不是很喜欢被别人带着走。我看视频的时候,如果老师出了一道题,我就会暂停下来自己先算一遍,不断地出错改正,出错改正,之后确定答案是对的,再继续看视频,如果和老师的解题思路一样我就一路快进,因为已经理解了,所以听个大概就可以了。我很喜欢这种学习的方法,这样能开拓自己的思维,如果思想总是被他人引领可能会损失一些创造性的思维。