iT邦幫忙

DAY 22
3

程式學習雜記系列 第 18

2013IT鐵人賽-22-Java08-Java轉型練習

  • 分享至 

  • xImage
  •  

2013IT鐵人賽-22-Java08-Java轉型練習

2013IT鐵人賽-22-Java08-Java轉型練習

前一篇的文章 2013IT鐵人賽-21-Java07-Java算術運算子 我們進行算術運算子的練習, 今天我們來練習轉型的練習.

今天我的練習在第2個裝置練習(請見 2013IT鐵人賽-16-git04-git基礎練習git pull 與第2裝置使用 的內容).

首先進入我們的 git 資料夾 /home/max/2013ironman (請按自己的設定調整 git 所在資料夾)

cd /home/max/2013ironman

將 GitHub 上面的資料同步回來

git pull origin master

From https://github.com/sakanamax/2013ironman
 * branch            master     -> FETCH_HEAD
Already up-to-date.

這邊就可以觀察到, 如果兩邊都是最新的, 那系統就會顯示 up-to-date.

首先整理下資料型態轉換的相關訊息
資料型態轉換
範圍較小轉換為範圍較大的可以, 反之不行
* 如果要將有效範圍較大轉成有效範圍較小的變數,要使用 "型態轉換運算子" 來達成
----型態轉換運算子 語法為
----(資料型態) 運算式;
* 注意, 轉換型態只針對 值 來轉換型態, 不針對變數本身轉換型態
* 自動資料型態轉換
----必須是數值
----只會將佔用空間較小的型態轉成佔用空間較大的型態
----整數會自動轉成浮點數, 浮點數不會自動轉成整數

至於資料型態以及大小, 在之前的 2013IT鐵人賽-14-Java04-Java命名規則與變數 內有提到, 如果忘記了, 可以到前面那篇查詢.

那我們就開始練習吧 ^_^

進入到 java 的練習資料夾

cd /home/max/2013ironman/java/

建立一個 java 原始檔如下

cat Basic_008_autoCasting.java

// 這個練習, 我們練習java 的自動資料型態轉換
class Basic_008_autoCasting {


 public static void main(String[] args){
 //宣告一個 inum 變數為整數 integer, 值為160
 int inum = 160;
 //使用 System.out.println 顯示出來
 System.out.println("身高為" + inum + "公分");
 //宣告一個 double 變數, 使用 inum 指定過去
 double dnum = inum;
 //使用 System.out.println 顯示出來
 System.out.println("身高為" + dnum + "公分");
 //觀察輸出的結果, 會顯示 160.0 公分, 因為double 的佔用空間比較大
 //所以使用佔用空間比較小的 int 指定到double 這樣是沒有問題的, 且會自動轉型 
 }
}

編譯我們剛剛寫的 java 程式

javac Basic_008_autoCasting.java

執行剛剛的程式

java Basic_008_autoCasting

剛剛是把資料型態小的資料指定到資料大的型態, 接下來我們把他反過來

建立一個 java 原始檔如下

cat Basic_009_forceCasting.java

// 這個練習, 我們練習java 的強制資料型態轉換
class Basic_009_forceCasting {


 public static void main(String[] args){
 //宣告一個 dnum 變數為double, 值為160
 double dnum = 160;
 //使用 System.out.println 顯示出來
 System.out.println("身高為" + dnum + "公分");
 //宣告一個 integer 變數, 使用 dnum 指定過去
 int inum = dnum;
 //使用 System.out.println 顯示出來
 System.out.println("身高為" + inum + "公分");
 //這個在編譯的過程就會有問題
 //觀察輸出的結果, 因為double 的佔用空間比較大
 //所以使用佔用空間比較大的 double 指定到int 這樣有問題的 
 }
}

接下來嘗試進行編譯的動作

javac Basic_009_forceCasting.java
Basic_009_forceCasting.java:10: error: possible loss of precision
int inum = dnum;
^
required: int
found: double
1 error

就會看到系統提出錯誤訊息 possible loss of precision 可能會失去精準度

接下來我們修改原來的程式, 並使用強制轉型的方式來進行

cat Basic_009_forceCasting.java

// 這個練習, 我們練習java 的強制資料型態轉換
class Basic_009_forceCasting {


 public static void main(String[] args){
 //宣告一個 dnum 變數為double, 值為160
 double dnum = 160;
 //使用 System.out.println 顯示出來
 System.out.println("身高為" + dnum + "公分");
 //宣告一個 integer 變數, 使用 dnum 指定過去
 //這邊使用強制轉型, 加上 (int) 轉成int資料型態
 int inum = (int) dnum;
 //使用 System.out.println 顯示出來
 System.out.println("身高為" + inum + "公分");
 //這個在編譯的過程就會有問題
 //觀察輸出的結果, 因為double 的佔用空間比較大
 //所以使用佔用空間比較大的 double 指定到int 這樣有問題的 
 //所以我們會使用強制轉型 (型態) 的方式來解決這個問題
 }
}

接下來嘗試進行編譯的動作

javac Basic_009_forceCasting.java

執行剛剛的程式

java Basic_009_forceCasting

在進行轉型的時候, 還是要注意到一些相關細節的, 不管是相同型態還是不同型態.
所以接下來我們再來練習另外一個例子.

建立一個 java 原始檔如下

cat Basic_010_noticeCasting.java

//這個範例我們來觀察如果進行轉型要注意的小地方
class Basic_010_noticeCasting {
 public static void main(String[] args){
 //宣告兩個 int 變數, 並指定值
 int num1 = 5;
 int num2 = 4;
 System.out.println("num1= " + num1);
 System.out.println("num2= " + num2);
 //宣告一個double 變數 div 
 double div = num1 / num2;
 //顯示 div 輸出的結果, 但是由於 num1,num2 是整數, 所以輸出的值, 
 //不是我們期待中的1.25 而是整數所能輸出的1 然後再指定給div
 System.out.println("double div is  num1 / num2= "+ div);
 //宣告一個double 變數 div2, 並於 num1 以及 num2 前進行強制轉型
 double div2 = (double) num1 / (double) num2;
 //觀察輸出的結果
 System.out.println("double div2 is (double) num1 / (double) num2= " + div2);
 }
}

接下來嘗試進行編譯的動作

javac Basic_010_noticeCasting.java

執行剛剛的程式

java Basic_010_noticeCasting

準備將相關檔案傳送到 GitHub 上面

cd /home/max/2013ironman/
git add java/*
git commit -m "Add java Casting files"

[master 987b9df] Add java Casting files
 6 files changed, 54 insertions(+)
 create mode 100644 java/Basic_008_autoCasting.class
 create mode 100644 java/Basic_008_autoCasting.java
 create mode 100644 java/Basic_009_forceCasting.class
 create mode 100644 java/Basic_009_forceCasting.java
 create mode 100644 java/Basic_010_noticeCasting.class
 create mode 100644 java/Basic_010_noticeCasting.java

git push origin master

Username for 'https://github.com': 您的帳號
Password for 'https://sakanamax@github.com': 您的密碼
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 3.14 KiB, done.
Total 9 (delta 2), reused 0 (delta 0)
To https://github.com/sakanamax/2013ironman.git
   eb1990c..987b9df  master -> master

完成今天 java 轉型的練習

Fun with Day 22 ~


上一篇
2013IT鐵人賽-21-Java07-Java算術運算子
下一篇
2013IT鐵人賽-23-git05-git基本概念
系列文
程式學習雜記26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言