首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 封裝與 Scanner 輸入:private 字段通過 setter/getter 訪問,主程序用 Scanner 實現鍵盤輸入健康值

     編輯:程式設計疑難解答

代碼結構說明


public class Dogs {
    private String strain = "拉布拉多犬";
    private int health = 100;
    private int love = 0;
    // getter/setter 略
    public static void main(String[] args) { ... }
}

問題一:鍵盤輸入健康值並調用 setter


import java.util.Scanner;

public static void main(String[] args) {
    Dogs dog = new Dogs();
    Scanner scan = new Scanner(System.in);
    
    System.out.print("請輸入健康值 (0-100): ");
    int inputHealth = scan.nextInt();  // 讀取整數
    
    dog.setHealth(inputHealth);  // 調用 setter,內部自動驗證範圍
    System.out.println("當前健康值: " + dog.getHealth());
    
    scan.close();
}

setHealth 邏輯(已正確)


public void setHealth(int health) {
    if (health > 100 || health < 0) {
        this.health = 40;
        System.out.println("健康值應在 0-100 之間,默認設置為 40");
    } else {
        this.health = health;
    }
}

問題二:private 字段修改位置—— setter 內部 vs 調用處

結論:主程序中 只負責獲取輸入並調用 setter,具體賦值、驗證、默認值邏輯**完全封裝在 setter 內部**。這就是封裝的核心價值——「調用者不關心怎麼存,只關心存什麼」。

完整主程序示例


public static void main(String[] args) {
    Dogs dog = new Dogs();
    Scanner scan = new Scanner(System.in);
    
    // 1. 輸入健康值
    System.out.print("輸入健康值: ");
    dog.setHealth(scan.nextInt());
    System.out.println("健康值: " + dog.getHealth());
    
    // 2. 設置喜愛度(setLove 邏輯有Bug,見下)
    dog.setLove(16);  // 傳入 16,但 setter 內寫死 50
    System.out.println("喜愛度: " + dog.getLove()); // 輸出 50
    
    // 3. 修改品種
    dog.setStrain("大黃狗");
    System.out.println("品種: " + dog.getStrain());
    
    scan.close();
}

代碼 Bug 提示:setLove 邏輯錯誤


// 當前錯誤實現
public void setLove(int love) { this.love = 50; }  // 忽略參數,寫死 50

// 正確實現
public void setLove(int love) { 
    if (love >= 0 && love <= 100) this.love = love; 
    else this.love = 0; 
}

封裝最佳實踐口訣

「字段私有化,方法公共化,驗證內部化,調用一行化。」

掌握 Scanner 輸入 + setter 封裝驗證,Java 面向對象第一課紮實過關。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景修改位置說明
類內部方法直接訪問 this.health = ...同一類中 private 可見
外部類/主程序**必須調用公共 setter** dog.setHealth(val)private 封裝,禁止直接訪問
setter 內部驗證在 setHealth 方法中判斷範圍集中驗證邏輯,保證數據完整性