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

Android 遊戲分數重置問題:局部變量生命週期導致計分歸零

     編輯:程式設計綜合問答

問題代碼

public void button(View view) {
    Integer counter = Integer.valueOf(0); // 每次點擊重新創建局部變量!
    counter = counter++; // 後置自增賦值無效,仍為 0
    TextView score = findViewById(R.id.score);
    score.setText("Score: " + counter);
}

核心問題分析

問題解釋
局部變量重複初始化每次調用方法都重新創建 counter = 0
後置自增賦值無效counter = counter++ 先賦值再自增,結果仍為 0
Integer 不可變性自動拆箱/裝箱產生新對象,原變量未改變

正確修復方案

方案一:成員變量(推薦)

public class GameActivity extends Activity {
    private int score = 0; // 成員變量,生命週期隨 Activity
    
    public void button(View view) {
        score++; // 直接遞增
        TextView scoreView = findViewById(R.id.score);
        scoreView.setText("Score: " + score);
    }
}

方案二:正確的自增寫法

// 正確寫法(任選其一)
counter++;           // 前置/後置自增語句獨立使用
counter = counter + 1;
counter += 1;
// 錯誤寫法
counter = counter++; // 無效!

進階:分數持久化

// 保存最高分
SharedPreferences prefs = getSharedPreferences("game_prefs", MODE_PRIVATE);
int highScore = prefs.getInt("high_score", 0);
if (score > highScore) {
    prefs.edit().putInt("high_score", score).apply();
}

Java 基礎知識點總結

  • 變量作用域:局部變量隨方法調用銷毀,成員變量隨對象生命週期
  • 自增運算符:i++ 返回原值再自增,++i 先自增再返回
  • 包裝類不可變:Integer 運算會創建新對象,需重新賦值

總結

將計數器提升為成員變量,使用正確的自增語法,是解決分數歸零的根本方案。建議夯實 Java 基礎後再進行 Android 開發。

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