首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 控制台帳號密碼驗證:三次失敗鎖定實作

     編輯:Java 相關知識

需求分析

  • 預設帳號:zhang / 密碼:123
  • 使用者輸入帳號密碼,比對成功顯示「登入成功」
  • 比對失敗顯示剩餘嘗試次數,累計 3 次失敗鎖定帳號並結束程式
  • 使用 Scanner 讀取控制台輸入

完整程式碼

import java.util.Scanner;

public class LoginDemo {
    public static void main(String[] args) {
        final String CORRECT_USER = "zhang";
        final String CORRECT_PASS = "123";
        final int MAX_ATTEMPTS = 3;

        Scanner scanner = new Scanner(System.in);
        boolean loggedIn = false;
        int attempts = 0;

        System.out.println("=== 登入系統 ===");

        while (attempts < MAX_ATTEMPTS && !loggedIn) {
            System.out.print("請輸入帳號:");
            String username = scanner.nextLine().trim();

            System.out.print("請輸入密碼:");
            String password = scanner.nextLine().trim();

            if (CORRECT_USER.equals(username) && CORRECT_PASS.equals(password)) {
                System.out.println("✅ 登入成功!歡迎 " + username);
                loggedIn = true;
            } else {
                attempts++;
                int remaining = MAX_ATTEMPTS - attempts;
                if (remaining > 0) {
                    System.out.printf("❌ 帳號或密碼錯誤,還有 %d 次機會%n", remaining);
                } else {
                    System.out.println("🔒 帳號或密碼連續錯誤 3 次,帳號已鎖定!");
                }
            }
        }
        scanner.close();
    }
}

關鍵點解析

  1. 使用 equals 比較字串:避免 == 比較參考位址導致邏輯錯誤。
  2. trim() 去除空白:防止使用者誤輸入前後空白導致比對失敗。
  3. nextLine() 而非 next():支援含空格的密碼,且避免換行符殘留問題。
  4. 迴圈條件:attempts < MAX_ATTEMPTS && !loggedIn 精準控制流程。

進階擴充建議

  • 密碼輸入時隱藏顯示:使用 Console.readPassword() (需在真實終端機運行)
  • 引入 BCrypt 對密碼進行雜湊儲存,不再明文硬編碼
  • 結合資料庫/Redis 實現分散式嘗試次數計數與解鎖機制
  • 加入圖形驗證碼或雙因子認證 (2FA) 提升安全性

此範例展示了基礎的控制台互動邏輯,是初學者掌握迴圈、條件判斷與輸入處理的絕佳練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved