作为一种编程语言,实践动手编程是必不可少的,学习前三个方面的只是,已经有基本的能力做一些简单的编程,今天要做的俩题目都是比较有意思,然后有时候一些公司可能面试会考的,作为检测基本水平的手段。
第一题,是java的一般编程书上学完循环的时候都会有的一道题目,打印一个金字塔,基本情况如下图所示:
这是一个小的金字塔,看起来这是一个比较简单的题目,但是真要很快编出来也是一件不太容易的事情。需要考虑的东西还是很多的。代码如下:
public class TowerTest
{
public static void main(String[] args)
{
//外层循环,循环的次数等于列数
for (int i=0 ; i<7 ; i++)
{
//内循环打印空格,发现每行的空格数等于2*7-1-2*i,这里的星星是占两个字符的
for (int j=0 ; j<13-2*i ; j++)
{
System.out.print(" ");
}
//打印星星,星星数是2*i+1
for (int j=0 ; j<2*i+1 ; j++)
{
System.out.print("★");
}
System.out.println("");
}
}
}
第一道题还是一道比较常规的题目,即使想不到循环的办法,最笨的打印的方法还是可以实现,但是第二题就是一道不是很好实现的方法了。打印一个近似圆,结果如下图所示:
这个题目看起来就很复杂,空格的数目还怎么打,星星在哪里打印。这个问题,百度一搜有很多种方法,这里列举一种我自己写的方法:
import java.lang.Math;//引入数学库
public class RoundTest
{
//指定半径
final static int RADIUS = 10;
public static void main(String[] args)
{
//这里需要建立坐标系,圆心选的位置为(RADIUS,RADIUS),所以最上面的y值为2倍的半径
int x , y=2*RADIUS;
while (y >= 0)
{
//求出x的坐标,列出圆的方程反解x
x = (int)Math.round(Math.sqrt(RADIUS*RADIUS-(y-RADIUS)*(y-RADIUS)));
for (int i=0 ; i<=RADIUS+x ;i++)
{
System.out.print(" ");
//选出两点打印*
if (i == RADIUS-x || i==RADIUS+x-1)
{
System.out.print("*");
}
}
System.out.println("");
y -= 2; //这里是y减小的步长
}
}
}