java學習筆記(四)-- 實踐篇

作爲一種編程語言,實踐動手編程是必不可少的,學習前三個方面的只是,已經有基本的能力做一些簡單的編程,今天要做的倆題目都是比較有意思,然後有時候一些公司可能面試會考的,作爲檢測基本水平的手段。

第一題,是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減小的步長
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章