2025年8月22日 星期五

26.VB.NET 運算子 (Operator) 筆記 (基礎篇)

VB.NET 運算子 (Operator) 筆記 (基礎篇)

VB.NET 運算子 (Operator) 筆記 (基礎篇)

運算子就像是程式設計中的主廚的料理工具如同主廚使用刀具、攪拌器等工具來處理食材,運算子也用來處理各種資料,進行計算、比較或組合。,它可以對一個或多個食材(運算元)運算元(Operand)是指運算子作用的對象,可以是變數、常數或運算式。進行處理,製作出美味的料理(結果)。透過理解各種運算子的功能與用法,就能夠精準地對資料進行各式各樣的處理,完成程式的核心運算邏輯。

認識運算子

運算子 (Operator): 運算子是用於執行數學計算、邏輯比較、字串串連等操作的特殊符號或關鍵字。它們作用於一個或多個運算元,並產生一個結果。

在 VB.NET 中,運算子主要可以分為以下幾種類型:

  1. 算術運算子用於執行基本的數學運算,如加減乘除,就像主廚的刀具與量杯,進行切割與份量計算。:用於執行基本的數學運算,如同主廚的刀具與量杯,進行切割與份量計算。
  2. 比較運算子用於比較兩個運算元,如同料理用的溫度計與磅秤,用來判斷食材的狀態。:用於比較兩個運算元,如同料理用的溫度計與磅秤,用來判斷食材的狀態。
  3. 邏輯運算子用於組合多個布林條件,如同食譜中的「與」、「或」指令,決定料理步驟的流程。:用於組合多個布林條件,如同食譜中的「與」、「或」指令,決定料理步驟的流程。
  4. 串連運算子用於連接多個字串,如同將不同的食材混合在一起,創造出新的風味。:用於連接多個字串,如同將不同的食材混合在一起,創造出新的風味。
  5. 賦值運算子用於將值指派給變數,如同將處理好的食材放入容器中保存。:用於將值指派給變數,如同將處理好的食材放入容器中保存。

選擇正確的運算子,就如同主廚為不同的食材挑選最合適的工具,是確保程式能正確處理資料並得出預期結果的關鍵。

算術運算子

算術運算子用於執行加、減、乘、除等數學運算。它們是進行數值計算的基礎工具。

運算子 說明 範例 結果
+ 加法 5 + 3 8
- 減法 5 - 3 2
* 乘法 5 * 3 15
/ 浮點數除法 5 / 3 1.6666...
\ 整數除法 5 \ 3 1
Mod 模數(取餘數) 5 Mod 3 2
^ 乘冪 5 ^ 3 125

算術運算子詳細說明

浮點數除法 (/) 與整數除法 (\) 的差異

/ 運算子會回傳包含小數的結果,而 \ 運算子只回傳整數部分。

Dim result1 As Double = 10 / 3  ' 結果為 3.3333...
Dim result2 As Integer = 10 \ 3  ' 結果為 3(捨棄小數部分)
模數運算子 (Mod) 的應用

常用於判斷數字的奇偶性或循環計算。

Dim number As Integer = 7
If number Mod 2 = 0 Then
    Console.WriteLine("偶數")
Else
    Console.WriteLine("奇數")
End If

範例:進階計算機

使用的控制項:
  • TextBox1:用於輸入第一個數字。
  • TextBox2:用於輸入第二個數字。
  • Button1-Button7:分別對應不同的算術運算。
  • Label1:用於顯示運算結果。
Imports System

Public Class Form1
    Private Sub PerformCalculation(operation As String)
        Try
            Dim num1 As Double = Double.Parse(TextBox1.Text)
            Dim num2 As Double = Double.Parse(TextBox2.Text)
            Dim result As Double = 0
            
            Select Case operation
                Case "+"
                    result = num1 + num2
                    Label1.Text = $"{num1} + {num2} = {result}"
                Case "-"
                    result = num1 - num2
                    Label1.Text = $"{num1} - {num2} = {result}"
                Case "*"
                    result = num1 * num2
                    Label1.Text = $"{num1} × {num2} = {result}"
                Case "/"
                    If num2 <> 0 Then
                        result = num1 / num2
                        Label1.Text = $"{num1} ÷ {num2} = {result:F4}"
                    Else
                        Label1.Text = "錯誤:除數不能為零"
                    End If
                Case "\"
                    If num2 <> 0 Then
                        result = num1 \ num2
                        Label1.Text = $"{num1} \ {num2} = {result}"
                    Else
                        Label1.Text = "錯誤:除數不能為零"
                    End If
                Case "Mod"
                    If num2 <> 0 Then
                        result = num1 Mod num2
                        Label1.Text = $"{num1} Mod {num2} = {result}"
                    Else
                        Label1.Text = "錯誤:除數不能為零"
                    End If
                Case "^"
                    result = num1 ^ num2
                    Label1.Text = $"{num1} ^ {num2} = {result:E4}"
            End Select
            
        Catch ex As Exception
            Label1.Text = "輸入格式錯誤"
        End Try
    End Sub
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        PerformCalculation("+")
    End Sub
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        PerformCalculation("-")
    End Sub
    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        PerformCalculation("*")
    End Sub
    
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        PerformCalculation("/")
    End Sub
    
    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        PerformCalculation("\")
    End Sub
    
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        PerformCalculation("Mod")
    End Sub
    
    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        PerformCalculation("^")
    End Sub
End Class

比較運算子

比較運算子用於比較兩個運算元的值,其結果為布林值(TrueFalse)。這就像使用磅秤比較兩樣食材的重量,會得到「相等」或「不相等」的結論。

運算子 說明 範例 結果
= 等於 5 = 5 True
<> 不等於 5 <> 3 True
< 小於 3 < 5 True
> 大於 5 > 3 True
<= 小於或等於 3 <= 5 True
>= 大於或等於 5 >= 5 True

比較運算子的特殊應用

字串比較

比較運算子也可以用於字串比較,會按照字典順序進行比較。

Dim result1 As Boolean = "Apple" < "Banana"  ' True
Dim result2 As Boolean = "apple" = "Apple"   ' False(區分大小寫)
日期比較

日期型別也支援所有比較運算子。

Dim date1 As Date = #1/1/2024#
Dim date2 As Date = #12/31/2023#
Dim isLater As Boolean = date1 > date2  ' True

範例:成績等級判定系統

使用的控制項:
  • TextBox1:用於輸入學生成績。
  • Button1:用於觸發等級判定。
  • Label1:用於顯示等級結果。
  • Label2:用於顯示詳細評語。
Imports System

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Dim score As Integer = Integer.Parse(TextBox1.Text)
            Dim grade As String = ""
            Dim comment As String = ""
            
            ' 使用多個比較運算子進行等級判定
            If score >= 90 Then
                grade = "A"
                comment = "優秀!恭喜你獲得優等成績!"
            ElseIf score >= 80 Then
                grade = "B"
                comment = "良好!繼續保持這個水準!"
            ElseIf score >= 70 Then
                grade = "C"
                comment = "及格!還有進步的空間!"
            ElseIf score >= 60 Then
                grade = "D"
                comment = "勉強及格,需要加強學習!"
            Else
                grade = "F"
                comment = "不及格,請重新努力!"
            End If
            
            ' 額外的條件檢查
            If score > 100 Then
                Label1.Text = "錯誤:成績不能超過100分"
                Label2.Text = ""
            ElseIf score < 0 Then
                Label1.Text = "錯誤:成績不能為負數"
                Label2.Text = ""
            Else
                Label1.Text = $"成績:{score}分,等級:{grade}"
                Label2.Text = comment
            End If
            
        Catch ex As Exception
            Label1.Text = "請輸入有效的數字"
            Label2.Text = ""
        End Try
    End Sub
End Class

邏輯運算子

邏輯運算子用於對布林運算式進行操作,常見於流程控制的判斷中。這就像食譜中的步驟指示,例如「當麵糰發酵完成烤箱預熱完畢,才可開始烘烤」。

運算子 說明 範例 結果說明
And / AndAlso 邏輯 AND True And False 當所有條件都為 True 時,結果才為 True
Or / OrElse 邏輯 OR True Or False 只要任一條件為 True,結果就為 True
Not 邏輯 NOT Not True 反轉布林值
Xor 邏輯 XOR True Xor False 當條件剛好一個為 True 一個為 False 時,結果為 True

AndAlso 與 And 的差異

建議優先使用 AndAlsoOrElse,它們具有「short-circuiting」(短路)特性,當第一個條件已能決定最終結果時,就不會再評估第二個條件,有助於提升效能。

AndAlso 短路評估
' 如果 x 為 0,則不會執行 100 / x,避免除零錯誤
If x <> 0 AndAlso 100 / x > 10 Then
    Console.WriteLine("條件成立")
End If
OrElse 短路評估
' 如果第一個條件為 True,就不會檢查第二個條件
If user.IsAdmin OrElse user.HasPermission("READ") Then
    ' 允許存取
End If
真值表
A B A And B A Or B A Xor B Not A
True True True True False False
True False False True True False
False True False True True True
False False False False False True

範例:智能登入驗證系統

使用的控制項:
  • TextBox1:用於輸入使用者名稱。
  • TextBox2:用於輸入密碼。
  • TextBox3:用於輸入年齡。
  • CheckBox1:管理員權限勾選框。
  • CheckBox2:VIP會員勾選框。
  • Button1:用於觸發登入驗證。
  • Label1:用於顯示驗證結果。
Imports System

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Dim username As String = TextBox1.Text.Trim()
            Dim password As String = TextBox2.Text
            Dim age As Integer = Integer.Parse(TextBox3.Text)
            Dim isAdmin As Boolean = CheckBox1.Checked
            Dim isVIP As Boolean = CheckBox2.Checked
            
            ' 基本驗證條件
            Dim hasValidUsername As Boolean = Not String.IsNullOrEmpty(username) AndAlso username.Length >= 3
            Dim hasValidPassword As Boolean = Not String.IsNullOrEmpty(password) AndAlso password.Length >= 6
            Dim isAdult As Boolean = age >= 18
            
            ' 使用複合邏輯運算子進行多重驗證
            Dim basicValid As Boolean = hasValidUsername AndAlso hasValidPassword
            Dim ageValid As Boolean = isAdult OrElse isAdmin  ' 管理員不受年齡限制
            Dim privilegeValid As Boolean = isAdmin OrElse isVIP  ' 至少要有一種特殊權限
            
            ' 最終驗證結果
            Dim loginSuccess As Boolean = basicValid AndAlso ageValid AndAlso privilegeValid
            
            ' 顯示詳細的驗證結果
            Dim result As String = "=== 登入驗證結果 ===" & vbNewLine
            result &= $"使用者名稱驗證:{If(hasValidUsername, "通過", "失敗")}" & vbNewLine
            result &= $"密碼驗證:{If(hasValidPassword, "通過", "失敗")}" & vbNewLine
            result &= $"年齡驗證:{If(ageValid, "通過", "失敗")}" & vbNewLine
            result &= $"權限驗證:{If(privilegeValid, "通過", "失敗")}" & vbNewLine
            result &= "==================" & vbNewLine
            
            If loginSuccess Then
                result &= "✓ 登入成功!歡迎使用系統"
                If isAdmin Then
                    result &= "(管理員模式)"
                ElseIf isVIP Then
                    result &= "(VIP會員模式)"
                End If
            Else
                result &= "✗ 登入失敗!請檢查以下條件:" & vbNewLine
                If Not hasValidUsername Then
                    result &= "• 使用者名稱至少需要3個字元" & vbNewLine
                End If
                If Not hasValidPassword Then
                    result &= "• 密碼至少需要6個字元" & vbNewLine
                End If
                If Not ageValid Then
                    result &= "• 需年滿18歲或具有管理員權限" & vbNewLine
                End If
                If Not privilegeValid Then
                    result &= "• 需要管理員權限或VIP會員資格" & vbNewLine
                End If
            End If
            
            Label1.Text = result
            
        Catch ex As Exception
            Label1.Text = "年齡請輸入有效數字"
        End Try
    End Sub
End Class

串連運算子

串連運算子用於將多個字串組合成一個單一的字串。這就像將不同的食材組合起來,形成一道完整的料理。

運算子 說明 範例 結果
& 字串串連(推薦) "Hello" & " World" "Hello World"
+ 加法或字串串連 "Hello" + " World" "Hello World"

為了避免程式碼的歧義並確保可讀性,進行字串串連時應始終使用「&」運算子。

字串串連的進階技巧

字串內插 (String Interpolation)

VB.NET 支援使用 $ 符號進行字串內插,讓程式碼更簡潔易讀。

Dim name As String = "張三"
Dim age As Integer = 25
Dim message As String = $"姓名:{name},年齡:{age}歲"
StringBuilder 的使用

當需要進行大量字串串連時,使用 StringBuilder 可以提升效能。

Imports System.Text

Dim sb As New StringBuilder()
sb.Append("第一段文字")
sb.Append("第二段文字")
sb.AppendLine("第三段文字(換行)")
Dim result As String = sb.ToString()

範例:個人資料格式化工具

使用的控制項:
  • TextBox1-TextBox6:分別輸入姓氏、名字、年齡、電話、Email、地址。
  • ComboBox1:選擇格式化樣式。
  • Button1:用於觸發格式化。
  • TextBox7 (Multiline):顯示格式化結果。
Imports System
Imports System.Text

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            ' 獲取使用者輸入的資料
            Dim lastName As String = TextBox1.Text.Trim()
            Dim firstName As String = TextBox2.Text.Trim()
            Dim age As String = TextBox3.Text.Trim()
            Dim phone As String = TextBox4.Text.Trim()
            Dim email As String = TextBox5.Text.Trim()
            Dim address As String = TextBox6.Text.Trim()
            
            ' 組合全名
            Dim fullName As String = lastName & firstName
            
            ' 根據選擇的格式進行字串串連
            Dim formatStyle As String = ComboBox1.Text
            Dim result As String = ""
            
            Select Case formatStyle
                Case "基本格式"
                    ' 使用 & 運算子進行基本串連
                    result = "姓名:" & fullName & vbNewLine &
                            "年齡:" & age & "歲" & vbNewLine &
                            "電話:" & phone & vbNewLine &
                            "Email:" & email & vbNewLine &
                            "地址:" & address
                    
                Case "正式格式"
                    ' 使用字串內插進行格式化
                    result = $"【個人資料】{vbNewLine}" &
                            $"───────────────{vbNewLine}" &
                            $"姓 名:{fullName}{vbNewLine}" &
                            $"年 齡:{age} 歲{vbNewLine}" &
                            $"聯絡電話:{phone}{vbNewLine}" &
                            $"電子郵件:{email}{vbNewLine}" &
                            $"居住地址:{address}{vbNewLine}" &
                            $"───────────────"
                            
                Case "卡片格式"
                    ' 使用 StringBuilder 建構複雜格式
                    Dim sb As New StringBuilder()
                    sb.AppendLine("╭─────────────────────╮")
                    sb.AppendLine("│        個人名片        │")
                    sb.AppendLine("├─────────────────────┤")
                    sb.AppendLine($"│ 姓名:{fullName.PadRight(12)}│")
                    sb.AppendLine($"│ 年齡:{age}歲{Space(12 - age.Length - 1)}│")
                    sb.AppendLine($"│ 電話:{phone.PadRight(12)}│")
                    sb.AppendLine($"│ 信箱:{email.PadRight(12)}│")
                    sb.AppendLine("├─────────────────────┤")
                    sb.AppendLine($"│ 地址:{address.PadRight(12)}│")
                    sb.AppendLine("╰─────────────────────╯")
                    result = sb.ToString()
                    
                Case "JSON格式"
                    ' 模擬 JSON 格式輸出
                    result = "{" & vbNewLine &
                            "  ""personalInfo"": {" & vbNewLine &
                            "    ""lastName"": """ & lastName & """," & vbNewLine &
                            "    ""firstName"": """ & firstName & """," & vbNewLine &
                            "    ""fullName"": """ & fullName & """," & vbNewLine &
                            "    ""age"": " & age & "," & vbNewLine &
                            "    ""phone"": """ & phone & """," & vbNewLine &
                            "    ""email"": """ & email & """," & vbNewLine &
                            "    ""address"": """ & address & """" & vbNewLine &
                            "  }" & vbNewLine &
                            "}"
                            
                Case Else
                    result = "請選擇格式化樣式"
            End Select
            
            ' 顯示結果
            TextBox7.Text = result
            
        Catch ex As Exception
            TextBox7.Text = "格式化過程發生錯誤:" & ex.Message
        End Try
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 初始化 ComboBox 選項
        ComboBox1.Items.AddRange({"基本格式", "正式格式", "卡片格式", "JSON格式"})
        ComboBox1.SelectedIndex = 0
    End Sub
End Class

賦值運算子

賦值運算子用於將值指派給變數。除了基本的賦值運算子外,還有複合賦值運算子,可以同時進行運算和賦值操作。

運算子 說明 範例 等同於
= 基本賦值 x = 5 將 5 指派給 x
+= 加法賦值 x += 3 x = x + 3
-= 減法賦值 x -= 3 x = x - 3
*= 乘法賦值 x *= 3 x = x * 3
/= 除法賦值 x /= 3 x = x / 3
\= 整除賦值 x \= 3 x = x \ 3
^= 乘冪賦值 x ^= 3 x = x ^ 3
&= 串連賦值 s &= "text" s = s & "text"

範例:銀行帳戶管理系統

使用的控制項:
  • TextBox1:顯示帳戶餘額。
  • TextBox2:輸入交易金額。
  • Button1-Button6:不同的帳戶操作。
  • ListBox1:顯示交易記錄。
  • Label1:顯示帳戶狀態。
Imports System

Public Class Form1
    Private balance As Decimal = 10000D  ' 初始餘額
    Private transactionCount As Integer = 0
    
    Private Sub UpdateDisplay()
        TextBox1.Text = balance.ToString("C")  ' 顯示為貨幣格式
        Label1.Text = If(balance >= 0, "帳戶正常", "帳戶透支")
    End Sub
    
    Private Sub AddTransaction(description As String, amount As Decimal)
        transactionCount += 1  ' 使用 += 增加交易計數
        Dim timestamp As String = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
        Dim record As String = $"[{transactionCount:D3}] {timestamp} - {description}: {amount:C}"
        ListBox1.Items.Add(record)
        ListBox1.SelectedIndex = ListBox1.Items.Count - 1  ' 自動選中最新記錄
    End Sub
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ' 存款操作
        Try
            Dim amount As Decimal = Decimal.Parse(TextBox2.Text)
            If amount > 0 Then
                balance += amount  ' 使用 += 複合賦值
                AddTransaction("存款", amount)
                UpdateDisplay()
                TextBox2.Clear()
            Else
                MessageBox.Show("存款金額必須大於零")
            End If
        Catch ex As Exception
            MessageBox.Show("請輸入有效的金額")
        End Try
    End Sub
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' 提款操作
        Try
            Dim amount As Decimal = Decimal.Parse(TextBox2.Text)
            If amount > 0 Then
                balance -= amount  ' 使用 -= 複合賦值
                AddTransaction("提款", -amount)
                UpdateDisplay()
                TextBox2.Clear()
            Else
                MessageBox.Show("提款金額必須大於零")
            End If
        Catch ex As Exception
            MessageBox.Show("請輸入有效的金額")
        End Try
    End Sub
    
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ' 投資獲利(餘額增加指定百分比)
        Try
            Dim percentage As Decimal = Decimal.Parse(TextBox2.Text)
            If percentage > 0 AndAlso percentage <= 100 Then
                Dim profit As Decimal = balance * (percentage / 100)
                balance += profit  ' 使用 += 複合賦值
                AddTransaction($"投資獲利({percentage}%)", profit)
                UpdateDisplay()
                TextBox2.Clear()
            Else
                MessageBox.Show("獲利百分比必須在0-100之間")
            End If
        Catch ex As Exception
            MessageBox.Show("請輸入有效的百分比")
        End Try
    End Sub
    
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        ' 投資損失(餘額減少指定百分比)
        Try
            Dim percentage As Decimal = Decimal.Parse(TextBox2.Text)
            If percentage > 0 AndAlso percentage <= 100 Then
                Dim loss As Decimal = balance * (percentage / 100)
                balance -= loss  ' 使用 -= 複合賦值
                AddTransaction($"投資損失({percentage}%)", -loss)
                UpdateDisplay()
                TextBox2.Clear()
            Else
                MessageBox.Show("損失百分比必須在0-100之間")
            End If
        Catch ex As Exception
            MessageBox.Show("請輸入有效的百分比")
        End Try
    End Sub
    
    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        ' 複利計算(餘額乘以指定倍數)
        Try
            Dim multiplier As Decimal = Decimal.Parse(TextBox2.Text)
            If multiplier > 0 Then
                Dim originalBalance As Decimal = balance
                balance *= multiplier  ' 使用 *= 複合賦值
                Dim difference As Decimal = balance - originalBalance
                AddTransaction($"複利計算(×{multiplier})", difference)
                UpdateDisplay()
                TextBox2.Clear()
            Else
                MessageBox.Show("倍數必須大於零")
            End If
        Catch ex As Exception
            MessageBox.Show("請輸入有效的倍數")
        End Try
    End Sub
    
    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        ' 清除記錄
        ListBox1.Items.Clear()
        transactionCount = 0  ' 重置計數器
        MessageBox.Show("交易記錄已清除")
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        UpdateDisplay()
        AddTransaction("帳戶開立", balance)
    End Sub
End Class

運算子優先順序

當一個運算式中包含多個不同的運算子時,程式會根據「優先順序」來決定計算的先後順序。這就像一份複雜的食譜,必須先做某些準備工作(例如:先切菜),才能進行下一步的烹煮。優先順序較高的運算子會先被執行。

理解運算子的優先順序對於撰寫正確無誤的程式碼至關重要。

優先順序 類型 運算子 結合性
1 (最高) 乘冪 ^ 右到左
2 一元運算子 +, - (正負號) 右到左
3 乘法與浮點數除法 *, / 左到右
4 整數除法 \ 左到右
5 模數 Mod 左到右
6 加法與減法 +, - 左到右
7 串連 & 左到右
8 比較 =, <>, <, >, <=, >= 左到右
9 邏輯 Not 右到左
10 邏輯 And, AndAlso 左到右
11 邏輯 Or, OrElse 左到右
12 (最低) 邏輯 Xor 左到右

如果想改變預設的運算順序,可以使用括號 ()括號內的運算式會被優先執行,就像在食譜上特別標註「此步驟最先處理」。。括號內的運算式會被最優先執行。

範例:數學運算式計算器

使用的控制項:
  • TextBox1:用於輸入數學運算式。
  • Button1:用於計算運算式。
  • Label1-Label4:顯示不同優先順序的計算結果。
  • TextBox2 (Multiline):顯示詳細的計算過程。
Imports System
Imports System.Text

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            ' 演示不同優先順序的計算
            Dim a As Double = 2
            Dim b As Double = 3
            Dim c As Double = 4
            Dim d As Double = 5
            
            ' 範例 1: 基本優先順序
            Dim result1 As Double = a + b * c  ' 2 + 3 * 4 = 2 + 12 = 14
            Dim result1_brackets As Double = (a + b) * c  ' (2 + 3) * 4 = 5 * 4 = 20
            
            ' 範例 2: 複雜運算優先順序
            Dim result2 As Double = a + b * c ^ d  ' 2 + 3 * 4^5 = 2 + 3 * 1024 = 3074
            Dim result2_brackets As Double = (a + b) * c ^ d  ' (2 + 3) * 4^5 = 5 * 1024 = 5120
            
            ' 範例 3: 混合運算優先順序
            Dim result3 As Double = a * b + c / d  ' 2 * 3 + 4 / 5 = 6 + 0.8 = 6.8
            Dim result3_brackets As Double = a * (b + c) / d  ' 2 * (3 + 4) / 5 = 2 * 7 / 5 = 2.8
            
            ' 範例 4: 邏輯與比較運算優先順序
            Dim result4 As Boolean = a < b AndAlso c > d OrElse a = b
            ' 拆解:(2 < 3) AndAlso (4 > 5) OrElse (2 = 3)
            ' 結果:True AndAlso False OrElse False = False OrElse False = False
            
            ' 顯示結果
            Label1.Text = $"範例 1 - 無括號: {result1}, 有括號: {result1_brackets}"
            Label2.Text = $"範例 2 - 無括號: {result2}, 有括號: {result2_brackets}"
            Label3.Text = $"範例 3 - 無括號: {result3}, 有括號: {result3_brackets}"
            Label4.Text = $"範例 4 - 邏輯運算: {result4}"
            
            ' 詳細計算過程說明
            Dim sb As New StringBuilder()
            sb.AppendLine("=== 運算子優先順序演示 ===")
            sb.AppendLine($"給定:a={a}, b={b}, c={c}, d={d}")
            sb.AppendLine()
            
            sb.AppendLine("【範例 1】基本優先順序")
            sb.AppendLine("運算式: a + b * c")
            sb.AppendLine("無括號: 2 + 3 * 4")
            sb.AppendLine("步驟 1: 先算乘法 3 * 4 = 12")
            sb.AppendLine("步驟 2: 再算加法 2 + 12 = 14")
            sb.AppendLine($"結果: {result1}")
            sb.AppendLine()
            sb.AppendLine("有括號: (a + b) * c = (2 + 3) * 4")
            sb.AppendLine("步驟 1: 先算括號內 2 + 3 = 5")
            sb.AppendLine("步驟 2: 再算乘法 5 * 4 = 20")
            sb.AppendLine($"結果: {result1_brackets}")
            sb.AppendLine()
            
            sb.AppendLine("【範例 2】乘冪優先順序")
            sb.AppendLine("運算式: a + b * c ^ d")
            sb.AppendLine("無括號: 2 + 3 * 4 ^ 5")
            sb.AppendLine("步驟 1: 先算乘冪 4 ^ 5 = 1024")
            sb.AppendLine("步驟 2: 再算乘法 3 * 1024 = 3072")
            sb.AppendLine("步驟 3: 最後加法 2 + 3072 = 3074")
            sb.AppendLine($"結果: {result2}")
            sb.AppendLine()
            
            sb.AppendLine("【範例 3】混合運算")
            sb.AppendLine("運算式: a * b + c / d")
            sb.AppendLine("無括號: 2 * 3 + 4 / 5")
            sb.AppendLine("步驟 1: 先算乘除法 2 * 3 = 6, 4 / 5 = 0.8")
            sb.AppendLine("步驟 2: 再算加法 6 + 0.8 = 6.8")
            sb.AppendLine($"結果: {result3}")
            sb.AppendLine()
            
            sb.AppendLine("【範例 4】邏輯運算優先順序")
            sb.AppendLine("運算式: a < b AndAlso c > d OrElse a = b")
            sb.AppendLine("拆解: (2 < 3) AndAlso (4 > 5) OrElse (2 = 3)")
            sb.AppendLine("步驟 1: 先算比較運算 True AndAlso False OrElse False")
            sb.AppendLine("步驟 2: AndAlso 優先於 OrElse: (True AndAlso False) OrElse False")
            sb.AppendLine("步驟 3: 計算結果 False OrElse False = False")
            sb.AppendLine($"結果: {result4}")
            
            TextBox2.Text = sb.ToString()
            
        Catch ex As Exception
            TextBox2.Text = "計算過程發生錯誤:" & ex.Message
        End Try
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Text = "點擊按鈕查看運算子優先順序演示"
        TextBox2.Text = "請點擊「計算運算式」按鈕開始演示"
    End Sub
End Class

運算子綜合應用範例

以下是一個完整的 VB.NET 範例,展示了如何綜合運用各種運算子來建構一個功能豐富的程式。這個範例將建立一個多功能的數據分析工具,讓使用者可以輸入一組數據並進行各種統計計算。

範例:智能數據分析器

這個範例允許使用者輸入一串數字,程式會自動計算各種統計值,並根據數據特徵給出分析報告。程式將綜合使用算術運算子、比較運算子、邏輯運算子等來完成複雜的數據處理。

使用的控制項:
  • TextBox1:用於輸入數據(以逗號分隔)。
  • Button1:用於開始分析數據。
  • Button2:用於清除所有數據和結果。
  • Label1-Label8:顯示各種統計結果。
  • TextBox2 (Multiline):顯示詳細的分析報告。
  • ProgressBar1:顯示分析進度。
  • CheckBox1-CheckBox3:選擇不同的分析選項。
Imports System
Imports System.Linq
Imports System.Text

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            ' 初始化進度條
            ProgressBar1.Value = 0
            
            ' 解析輸入的數據
            Dim inputText As String = TextBox1.Text.Trim()
            If String.IsNullOrEmpty(inputText) Then
                MessageBox.Show("請輸入數據")
                Return
            End If
            
            ' 將字串分割並轉換為數字陣列
            Dim numberStrings() As String = inputText.Split(","c)
            Dim numbers() As Double = numberStrings.Select(Function(s) Double.Parse(s.Trim())).ToArray()
            
            ProgressBar1.Value = 10
            
            ' 基本統計計算(使用算術運算子)
            Dim count As Integer = numbers.Length
            Dim sum As Double = numbers.Sum()
            Dim average As Double = sum / count  ' 使用 / 運算子
            Dim minimum As Double = numbers.Min()
            Dim maximum As Double = numbers.Max()
            Dim range As Double = maximum - minimum  ' 使用 - 運算子
            
            ProgressBar1.Value = 30
            
            ' 計算變異數和標準差(使用複合算術運算子)
            Dim variance As Double = 0
            For Each num As Double In numbers
                Dim difference As Double = num - average
                variance += difference ^ 2  ' 使用 += 和 ^ 運算子
            Next
            variance /= count  ' 使用 /= 運算子
            Dim standardDeviation As Double = Math.Sqrt(variance)
            
            ProgressBar1.Value = 50
            
            ' 計算中位數
            Dim sortedNumbers() As Double = numbers.OrderBy(Function(x) x).ToArray()
            Dim median As Double
            If count Mod 2 = 0 Then  ' 使用 Mod 運算子檢查偶數
                ' 偶數個數據,取中間兩數的平均
                Dim mid1 As Integer = count \ 2 - 1  ' 使用 \ 運算子
                Dim mid2 As Integer = count \ 2
                median = (sortedNumbers(mid1) + sortedNumbers(mid2)) / 2
            Else
                ' 奇數個數據,取中間數
                median = sortedNumbers(count \ 2)
            End If
            
            ProgressBar1.Value = 70
            
            ' 數據分析(使用比較和邏輯運算子)
            Dim positiveCount As Integer = 0
            Dim negativeCount As Integer = 0
            Dim zeroCount As Integer = 0
            Dim evenCount As Integer = 0
            Dim oddCount As Integer = 0
            
            For Each num As Double In numbers
                ' 使用比較運算子分類數據
                If num > 0 Then
                    positiveCount += 1
                ElseIf num < 0 Then
                    negativeCount += 1
                Else  ' num = 0
                    zeroCount += 1
                End If
                
                ' 檢查整數的奇偶性
                If num = Math.Floor(num) Then  ' 檢查是否為整數
                    If CInt(num) Mod 2 = 0 Then
                        evenCount += 1
                    Else
                        oddCount += 1
                    End If
                End If
            Next
            
            ProgressBar1.Value = 90
            
            ' 顯示基本統計結果
            Label1.Text = $"數據總數:{count}"
            Label2.Text = $"總和:{sum:F2}"
            Label3.Text = $"平均值:{average:F2}"
            Label4.Text = $"中位數:{median:F2}"
            Label5.Text = $"最小值:{minimum:F2}"
            Label6.Text = $"最大值:{maximum:F2}"
            Label7.Text = $"全距:{range:F2}"
            Label8.Text = $"標準差:{standardDeviation:F4}"
            
            ' 生成詳細分析報告(使用字串串連運算子)
            Dim report As New StringBuilder()
            report.AppendLine("=== 數據分析報告 ===")
            report.AppendLine($"分析時間:{DateTime.Now:yyyy/MM/dd HH:mm:ss}")
            report.AppendLine()
            
            ' 基本統計摘要
            report.AppendLine("【基本統計】")
            report.AppendLine($"• 數據筆數:{count}")
            report.AppendLine($"• 數據總和:{sum:F2}")
            report.AppendLine($"• 算術平均:{average:F2}")
            report.AppendLine($"• 中位數值:{median:F2}")
            report.AppendLine($"• 最小值:{minimum:F2}")
            report.AppendLine($"• 最大值:{maximum:F2}")
            report.AppendLine($"• 全距:{range:F2}")
            report.AppendLine($"• 變異數:{variance:F4}")
            report.AppendLine($"• 標準差:{standardDeviation:F4}")
            report.AppendLine()
            
            ' 數據分佈分析
            report.AppendLine("【數據分佈】")
            report.AppendLine($"• 正數:{positiveCount} 個 ({positiveCount * 100.0 / count:F1}%)")
            report.AppendLine($"• 負數:{negativeCount} 個 ({negativeCount * 100.0 / count:F1}%)")
            report.AppendLine($"• 零:{zeroCount} 個 ({zeroCount * 100.0 / count:F1}%)")
            report.AppendLine($"• 整數中的偶數:{evenCount} 個")
            report.AppendLine($"• 整數中的奇數:{oddCount} 個")
            report.AppendLine()
            
            ' 條件分析(使用邏輯運算子)
            report.AppendLine("【條件分析】")
            
            ' 數據品質評估
            Dim hasOutliers As Boolean = False
            Dim outlierCount As Integer = 0
            Dim lowerBound As Double = average - 2 * standardDeviation
            Dim upperBound As Double = average + 2 * standardDeviation
            
            For Each num As Double In numbers
                If num < lowerBound OrElse num > upperBound Then
                    hasOutliers = True
                    outlierCount += 1
                End If
            Next
            
            report.AppendLine($"• 是否有異常值:{If(hasOutliers, "是", "否")}")
            If hasOutliers Then
                report.AppendLine($"• 異常值數量:{outlierCount} 個")
                report.AppendLine($"• 正常範圍:{lowerBound:F2} ~ {upperBound:F2}")
            End If
            
            ' 數據特徵判斷
            Dim isSymmetric As Boolean = Math.Abs(average - median) < standardDeviation * 0.1
            Dim isUniform As Boolean = standardDeviation < (range * 0.3)
            Dim isNormalDistributed As Boolean = isSymmetric AndAlso Not isUniform
            
            report.AppendLine($"• 數據對稱性:{If(isSymmetric, "對稱", "偏態")}")
            report.AppendLine($"• 數據分散性:{If(isUniform, "均勻分佈", "集中分佈")}")
            report.AppendLine($"• 近似常態分佈:{If(isNormalDistributed, "是", "否")}")
            report.AppendLine()
            
            ' 選擇性分析
            If CheckBox1.Checked Then
                report.AppendLine("【進階分析 - 四分位數】")
                Dim q1Index As Integer = count \ 4
                Dim q3Index As Integer = (count * 3) \ 4
                Dim q1 As Double = sortedNumbers(q1Index)
                Dim q3 As Double = sortedNumbers(q3Index)
                Dim iqr As Double = q3 - q1
                
                report.AppendLine($"• 第一四分位數 (Q1):{q1:F2}")
                report.AppendLine($"• 第三四分位數 (Q3):{q3:F2}")
                report.AppendLine($"• 四分位距 (IQR):{iqr:F2}")
                report.AppendLine()
            End If
            
            If CheckBox2.Checked Then
                report.AppendLine("【進階分析 - 峰度與偏度】")
                ' 簡化的偏度計算
                Dim skewness As Double = 0
                For Each num As Double In numbers
                    skewness += Math.Pow((num - average) / standardDeviation, 3)
                Next
                skewness /= count
                
                report.AppendLine($"• 偏度係數:{skewness:F4}")
                report.AppendLine($"• 偏度解釋:{If(Math.Abs(skewness) < 0.5, "接近對稱", If(skewness > 0, "右偏", "左偏"))}")
                report.AppendLine()
            End If
            
            If CheckBox3.Checked Then
                report.AppendLine("【數據建議】")
                If hasOutliers Then
                    report.AppendLine("• 建議檢查異常值的合理性")
                End If
                If standardDeviation > range * 0.5 Then
                    report.AppendLine("• 數據變異較大,建議增加樣本數")
                End If
                If count < 30 Then
                    report.AppendLine("• 樣本數較少,統計結果可能不夠穩定")
                End If
                report.AppendLine()
            End If
            
            TextBox2.Text = report.ToString()
            ProgressBar1.Value = 100
            
        Catch ex As Exception
            MessageBox.Show($"分析過程發生錯誤:{ex.Message}")
            ProgressBar1.Value = 0
        End Try
    End Sub
    
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' 清除所有輸入和結果
        TextBox1.Clear()
        TextBox2.Clear()
        
        Label1.Text = "數據總數:"
        Label2.Text = "總和:"
        Label3.Text = "平均值:"
        Label4.Text = "中位數:"
        Label5.Text = "最小值:"
        Label6.Text = "最大值:"
        Label7.Text = "全距:"
        Label8.Text = "標準差:"
        
        ProgressBar1.Value = 0
        
        CheckBox1.Checked = False
        CheckBox2.Checked = False
        CheckBox3.Checked = False
        
        MessageBox.Show("所有數據已清除")
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 初始化介面
        TextBox1.Text = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
        TextBox2.Text = "請輸入數據後點擊「開始分析」按鈕"
        
        CheckBox1.Text = "計算四分位數"
        CheckBox2.Text = "計算偏度係數"
        CheckBox3.Text = "顯示數據建議"
        
        ProgressBar1.Minimum = 0
        ProgressBar1.Maximum = 100
        ProgressBar1.Value = 0
    End Sub
End Class

這個綜合範例展示了如何在實際應用中靈活運用各種運算子:

  • 算術運算子:用於基本的統計計算,如平均值、變異數等。
  • 比較運算子:用於數據分類和條件判斷。
  • 邏輯運算子:用於複合條件判斷和特徵分析。
  • 賦值運算子:用於累積計算和數據更新。
  • 串連運算子:用於生成詳細的分析報告。

透過合理地組合使用不同類型的運算子,可以建構出功能強大且邏輯清晰的程式,有效處理複雜的數據分析任務。