直接使用double計算會衍生的小數點不規則問題,
(參考show_double() method )
此篇有較詳細的說明, http://www.ej38.com/showinfo/java-133092.html
因此有BCD碼的產生,
不止Java會發生,其他程式語言對浮點數也會有相同狀況,
(老師應該想讓大家瞭解這樣的情形)
需使用四捨五入或BigDecimal解決幫助使用工程上或科學上運算的問題。
程式如下(仍保留部分原作者原始碼):
半徑與PI值仍是設定double,
回傳圓周長的型態也是double
---------------------------------------------------------------------------
import java.math.BigDecimal;
class M9816104
{
double pi;
double radius,width,height;
double diagonal ()
{
return Math.sqrt (width*width+height*height);
}
// 新增1
double perimeter ()
{
return radius*2*pi;
}
// 新增2
double perimeter (double radius , double pi)
{
BigDecimal b1 = new BigDecimal(Double.toString(radius));
BigDecimal b2 = new BigDecimal(Double.toString(pi));
return b1.multiply(b2).doubleValue()*2;
}
void show_perimeter ()
{
System.out.println ("圓周長="+(radius*2*pi));
}
// 新增3
void show_double ()
{
int i;
for(i=0;i<5;i++)
{
System.out.println(i+"==>"+i*1.1);
}
/*
會產出以下結果
0==>0.0
1==>1.1
2==>2.2
3==>3.3000000000000003
4==>4.4
*/
}
public static void main (String[] X)
{
M9816104 test = new M9816104();
test.radius=5.0;
test.pi=3.14;
test.width=4.0;
test.height=3.0;
test.show_perimeter ();
System.out.println ("矩型對角線="+test.diagonal());
System.out.println ("(1)perimeter="+test.perimeter());
System.out.println ("(2)perimeter="+test.perimeter(test.radius,test.pi));
test.show_double();
}
}
學習發現 往人少的地方走
Showing posts with label 程式設計. Show all posts
Showing posts with label 程式設計. Show all posts
Saturday, January 09, 2010
Saturday, November 14, 2009
Java Pyramid 金字塔 練習
很久沒寫程式了,也來試試看這個基礎實用的題目,
"輸入金字塔層級(n),用程式畫出金字塔圖案 "。
使用的程式語言Java (用什麼開發皆可 C,C++...),
訓練思考比較重要囉~(寫法百百種,以下是以最直覺的想法短時間實作)
*******************************************************************************
public class Pyramid_Test
{
public static void main(String args[])
{
int n=Integer.parseInt(args[0]); // 輸入數字,代表列數
int p=n*2-1; // 每列點數
int istar; // 開始列印*起點
int inum=0; // 列印*次數
int i,j;
boolean bflag=true; // 列印 * 或者 " "
for( i=0 ; i<n ;i++)
{
istar=n-1-i;
for( j=0 ; j < p && inum <= i ;j++)
{
if(j >= istar && bflag==true)
{
System.out.print("*");
inum=inum+ 1;
bflag=false;
}
else
{
System.out.print(" ");
bflag=true;
}
}
inum=0; //進入下一層,列印*次數歸零
bflag=true; //進入下一層,列印* 或者 " " 還原初始值
System.out.println(""); // 換行
}
}
}
*******************************************************************************
"輸入金字塔層級(n),用程式畫出金字塔圖案 "。
使用的程式語言Java (用什麼開發皆可 C,C++...),
訓練思考比較重要囉~(寫法百百種,以下是以最直覺的想法短時間實作)
*******************************************************************************
public class Pyramid_Test
{
public static void main(String args[])
{
int n=Integer.parseInt(args[0]); // 輸入數字,代表列數
int p=n*2-1; // 每列點數
int istar; // 開始列印*起點
int inum=0; // 列印*次數
int i,j;
boolean bflag=true; // 列印 * 或者 " "
for( i=0 ; i<n ;i++)
{
istar=n-1-i;
for( j=0 ; j < p && inum <= i ;j++)
{
if(j >= istar && bflag==true)
{
System.out.print("*");
inum=inum+ 1;
bflag=false;
}
else
{
System.out.print(" ");
bflag=true;
}
}
inum=0; //進入下一層,列印*次數歸零
bflag=true; //進入下一層,列印* 或者 " " 還原初始值
System.out.println(""); // 換行
}
}
}
*******************************************************************************
Subscribe to:
Posts (Atom)